run - python async api
¿Cuál es la diferencia entre loop.create_task, asyncio.async/asegurar_future y Task? (1)
Como habrás notado, todos hacen lo mismo.
asyncio.async
tuvo que ser reemplazado por asyncio.ensure_future
porque en Python> = 3.5, async
se ha convertido en una palabra clave [1] .
La razón de ser de create_task BaseEventLoop.create_task(coro) :
Los bucles de eventos de terceros pueden usar su propia subclase de Tarea para la interoperabilidad. En este caso, el tipo de resultado es una subclase de Tarea.
Y esto también significa que no debe crear una Task
directamente, ya que diferentes bucles de eventos pueden tener diferentes formas de crear una "tarea".
Editar
Otra diferencia importante es que, además de aceptar coroutines, ensure_future
también acepta cualquier objeto que se pueda esperar; create_task
por otro lado solo acepta coroutines.
Estoy un poco confundido por algunas funciones asyncio
. Veo que hay una función BaseEventLoop.create_task(coro)
para programar una co-rutina. La documentación para create_task
dice que es una nueva función y, por compatibilidad, deberíamos usar asyncio.async(coro)
que al referirme a los documentos que veo de nuevo es un alias para asyncio.ensure_future(coro)
que nuevamente programa la ejecución de una co-rutina.
Mientras tanto, he estado usando Task(coro)
para programar la ejecución de la co-rutina y eso también parece estar funcionando bien. Entonces, ¿cuál es la diferencia entre todos estos?