【发布时间】:2016-02-02 21:54:16
【问题描述】:
@asyncio.coroutine
def listener():
while True:
message = yield from websocket.recieve_message()
if message:
yield from handle(message)
loop = asyncio.get_event_loop()
loop.run_until_complete(listener())
假设我正在使用带有 asyncio 的 websockets。这意味着我收到来自websockets 的消息。当我收到一条消息时,我想处理这条消息,但我的代码丢失了所有异步的东西。因为yield from handle(message) 绝对是阻塞的......我怎么能找到一种方法让它成为非阻塞的?比如,同时处理多条消息。在处理另一条消息之前不必等待消息处理完毕。
谢谢。
【问题讨论】:
-
通常每个 websocket 需要一个任务来读取,写入 websocket 可能与其他任务异步执行。
handle也可能是单独的任务。你的代码不完整,所以要得到你真正需要的东西并不容易。 -
如果这是您正在调用的唯一协程,则侦听器将阻塞,因为它将无限运行(因为 while true 循环)。如果您有另一个协同程序同时运行(具有自己的 yield from 语句),那么 asyncio 将在 yield from 语句之间来回反弹,因此它将不再“阻塞”。
标签: python python-asyncio