Estoy un poco confundido por algunas funciones asyncio
. Veo que hay una función BaseEventLoop.create_task(coro)
para progtwigr 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 nuevamente que veo es un alias para asyncio.ensure_future(coro)
que nuevamente progtwig la ejecución de una co-rutina.
Mientras tanto, he estado usando Task(coro)
para progtwigr la ejecución de la co-rutina y eso también parece estar funcionando bien. Entonces, ¿cuál es la diferencia entre todos estos?
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 [2] :
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.