这是我的代码,我希望my_reader
等待最多5秒,然后再使用my_future.result()
执行某些操作。请注意my_reader
coroutine ,回调。
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秒内完成。
如何在回调中等待未来?
答案 0 :(得分:2)
抱歉,等待回调是不可能的。 应该通过定义立即执行回调 - 否则事件循环会在回调执行期间挂起。
您的逻辑应基于 coroutines ,但低级 on_read 回调可以通过设置未来值来通知这些协程。
请参阅aiopg.connection获取灵感。回调名为Connection._ready
。
答案 1 :(得分:0)