Python asyncio在callb中等待未来

2024-04-20 10:20:55 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码,我希望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秒内完成。在

如何在回调中等待未来?


Tags: 代码importloopasynciomydefcreatefuture
2条回答

抱歉,无法等待回拨。 根据定义,回调应该立即执行,否则事件循环将在回调执行期间挂起。在

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

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

您应该单独运行协同程序,并通过队列从回调向它发送数据。在

看看这个答案:

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

相关问题 更多 >