tutorial run programming loop has español await attribute asyncio async python python-3.x async-await future python-asyncio

run - python async await



Esperar el futuro del ejecutor: el futuro no se puede usar en la expresión ''aguardar'' (1)

Deberías usar loop.run_in_executor :

from concurrent.futures import ThreadPoolExecutor import asyncio def work(): # do some blocking io pass async def main(loop): executor = ThreadPoolExecutor() await loop.run_in_executor(executor, work) loop = asyncio.get_event_loop() loop.run_until_complete(main(loop)) loop.close()

EDITAR

concurrent.futures.Future object son diferentes de asyncio.Future . El asyncio.Future está destinado a ser utilizado con bucles de eventos y es aguardable , mientras que el anterior no lo es. loop.run_in_executor proporciona la interoperabilidad necesaria entre los dos.

EDIT # 2

Usar executor.submit no es mi decisión. Esto es usado internamente por varias bibliotecas, como solicitudes-futuros. Estoy buscando una forma de interoperar con esos módulos de corutinas.

Aunque no está documentado, puede usar asyncio.wrap_future(future, *, loop=None) para convertir un concurrent.futures.Future en un asyncio.Future .

Quería usar un ThreadPoolExecutor de un python coroutine , para delegar algunas llamadas de red de bloqueo a un hilo separado. Sin embargo, ejecutando el siguiente código:

from concurrent.futures import ThreadPoolExecutor import asyncio def work(): # do some blocking io pass async def main(): executor = ThreadPoolExecutor() await executor.submit(work) loop = asyncio.get_event_loop() loop.run_until_complete(main()) loop.close()

causa un error:

TypeError: object Future can''t be used in ''await'' expression

¿ Future objetos Future no son aguardables ? ¿Por qué dice que no?

¿Cómo puedo await un objeto Future devuelto por executor.submit ?

Python 3.5.0

EDITAR

Usar executor.submit no es mi decisión. Esto es usado internamente por varias bibliotecas, como requests-futures . Estoy buscando una forma de interoperar con esos módulos de corutinas.