- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用了aioredis用于编写将在特定 channel 上监听并以异步方式运行某些命令的异步服务。
基本上我从examples page中获取了一个代码编写一个小的测试应用程序并删除不必要的部分:
import asyncio
import aioredis
async def reader(ch):
while (await ch.wait_message()):
msg = await ch.get_json()
print('Got Message:', msg)
i = int(msg['sleep_for'])
print('Sleep for {}'.format(i))
await asyncio.sleep(i)
print('End sleep')
async def main():
sub = await aioredis.create_redis(('localhost', 6379))
res = await sub.subscribe('chan:1')
ch1 = res[0]
tsk = await reader(ch1)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
还有另一个测试应用程序,它发布带有 sleep_for
字段的 json blob,然后在订阅者应用程序中使用它来模拟 reader
协程中的一些工作,使用sleep
语句。
我希望“ sleep ”以“并行”方式运行,但实际上它们以同步方式出现在屏幕上,只是一个接一个。
我的猜测是,只要点击 await ch.get_json(..)
(或者甚至 await ch.wait_message()
)行,我就应该能够处理下一条消息。在实践中,它像同步代码一样运行。我哪里错了?这可以使用连接池来处理,但这意味着有些东西不是异步的,也不知道到底是什么。
最佳答案
My guess was that as soon as hit the await ch.get_json(..) (or maybe even await ch.wait_message()) line I should be able to handle next message.
这不是 async/await
语法的工作方式。每次您在协程中点击 await
时,该协程将“暂停”,将控制权交给被调用的协程。如果它正在休眠,它不会自动处理下一条消息。
您应该做的是使用 ensure_future
在单独的协程中处理每条消息:
import asyncio
import aioredis
async def handle_msg(msg):
print('Got Message:', msg)
i = int(msg['sleep_for'])
print('Sleep for {}'.format(i))
await asyncio.sleep(i)
print('End sleep')
async def reader(ch):
while (await ch.wait_message()):
msg = await ch.get_json()
asyncio.ensure_future(handle_msg(msg))
async def main():
sub = await aioredis.create_redis(('localhost', 6379))
res = await sub.subscribe('chan:1')
ch1 = res[0]
tsk = await reader(ch1)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
关于python - AIORedis 和 PUB/SUB 不是 asnyc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118816/
我的问题由两部分组成。 在我的网页中,我正在使用 ajax post 调用动态创建一些 div,以从数据库获取一些信息。然后我创建我的 div。我的结构如下。
在我的 Android 应用程序中,我使用 BehaviourSubject 从数据提供者“获取数据”到我的 UI 和其他需要数据的服务。举个例子,我们假设这些是给我们用户的消息。 每当触发数据(例如
我遇到了异步方法的问题,该方法打印并返回所有 vidDuration 值,然后为每个 videoId 放置 viewCount 值,但 vidDuration 仅重复收到的最后一个值并将其分配给所有
我对 nodeJS/Javascript 的异步特性(Python 背景)相对较新,并试图弄清楚如何单步执行嵌套的 JSON 对象,使用 asnyc.js 提取它的值。 我遇到了这个片段,How to
我用了aioredis用于编写将在特定 channel 上监听并以异步方式运行某些命令的异步服务。 基本上我从examples page中获取了一个代码编写一个小的测试应用程序并删除不必要的部分: i
下面的js脚本连接SSH和mongodb,在数据库中创建一个文档。 (async function run() { try { //connect to SSH server
问题是我尝试多次运行 RunPrivateMethod(),但我遇到了阻塞问题,或者在我使用 async/await 时直接无法正常工作。与其在这里分享每一次尝试,我只是把我当前的版本。 在 RunP
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试通过 Azure Blob Storage .NET api 上传如此多的文件并使用当前最新版本 4.0.1。在 ASP.NET MVC 应用程序中,我使用异步操作方法通过等待 blobFi
目前,我有一个使用FETCH请求接收数据的异步函数,一旦接收到数据,我希望它立即运行CheckVals。唯一的问题是,在我的异步函数完成之前,check Vals正在运行。如何让CheckVals在运
[已编辑]:我已经用 promise 方式更改了我的代码。 我正在写 React with this starter 由 facebook 创建,我是测试方面的新手。 现在我有一个关于图像的组件,它有
我是一名优秀的程序员,十分优秀!