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

Python - asyncio - Wait for a future inside a callback

这是我的代码,我希望 my_reader 最多等待 5 秒,然后用 my_future.result() 做一些事情。请注意 my_reader 不是 一个 coroutine,它是一个 callback.

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()

我也不想用:

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

如何在回调中等待未来?

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

你的逻辑应该建立在 coroutines 但低级 on_read 回调可以通过设置一个值来通知这些协程未来。

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

您应该 运行 协程单独并通过队列从回调中向其发送数据。

看看这个答案: