这是我的代码,我希望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
。在您应该单独运行协同程序,并通过队列从回调向它发送数据。在
看看这个答案:
https://stackoverflow.com/a/29475218/1112457
相关问题 更多 >
编程相关推荐