Je suis un peu confus par certaines fonctions asyncio
. Je vois qu'il y a une fonction BaseEventLoop.create_task(coro)
pour planifier une co-routine. La documentation de create_task
Dit que c'est une nouvelle fonction et pour des raisons de compatibilité, nous devons utiliser asyncio.async(coro)
qui, en se référant à nouveau aux documents, je vois est un alias pour asyncio.ensure_future(coro)
qui planifie à nouveau l'exécution d'une co-routine.
Pendant ce temps, j'utilise Task(coro)
pour planifier l'exécution en co-routine et cela semble également fonctionner correctement. alors, quelle est la différence entre tout cela?
Comme vous l'avez remarqué, ils font tous la même chose.
asyncio.async
devait être remplacé par asyncio.ensure_future
car dans Python> = 3.5, async
est devenu un mot clé [1] .
create_task
's raison d'être [2] :
Les boucles d'événements tierces peuvent utiliser leur propre sous-classe de tâche pour l'interopérabilité. Dans ce cas, le type de résultat est une sous-classe de Task.
Et cela signifie également que vous ne devez pas créer directement un Task
, car différentes boucles d'événements peuvent avoir différentes manières de créer une "tâche".
Modifier
Une autre importante différence est qu'en plus d'accepter les coroutines, ensure_future
accepte également tout objet attendu; create_task
d'autre part accepte seulement les coroutines.