繁体   English   中英

Python-asyncio-等待回调中的未来

[英]Python - asyncio - Wait for a future inside a callback

这是我的代码,我希望my_reader等待最多5秒钟,以备将来使用,然后对my_future.result() 请注意, my_reader 不是 协程 ,它是一个回调

import asyncio, socket

sock = ...

async def my_coroutine():
    ...

def my_reader():
    my_future = asyncio.Future()
    ...

    # I want to wait (with a timeout) for my_future


loop = asyncio.get_event_loop()
loop.add_reader(sock, my_reader)
loop.run_forever()
loop.close()

我不想使用:

  • AbstractEventLoop.create_datagram_endpoint()
  • AbstractEventLoop.create_connection()
  • ...

我拥有的套接字是从另一个模块返回的,我必须读取给定大小的数据包。 转移必须在5秒内完成。

如何在回调中等待将来?

抱歉,不可能在回调中等待。 回调应按定义立即执行-否则事件循环将在回调执行期间挂起。

您的逻辑应该建立在协程上,但是低级on_read回调可能会通过设置future的值来通知这些协程。

请参阅aiopg.connection以获取灵感。 回调名为Connection._ready

您应该分别运行协程,并通过Queue从回调中向其发送数据。

看这个答案:

https://stackoverflow.com/a/29475218/1112457

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM