Вот мой код, я хочу my_reader
ждать максимум 5 секунд для будущего, а затем что-то делать с my_future.result()
. Обратите внимание, что my_reader
является не a coroutine, это callback.Python - asyncio - Ждите будущего в обратном вызове
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()
- ...
Гнездо у меня возвращается из другого модуля и I должны читать пакеты с заданным размером. Передача должна произойти менее 5 секунд.
Как подождать будущее внутри обратного вызова?
почему 'add_reader' не принимает сопрограмм? –
Это очень низкий уровень API (например, 'asyncio.Protocol' BTW). Coroutines работают на более высоких уровнях. –