J'essaie de asyncio.create_task()
mais je fais face à cette erreur:
Voici un exemple:
import asyncio
import time
async def async_say(delay, msg):
await asyncio.sleep(delay)
print(msg)
async def main():
task1 = asyncio.create_task(async_say(4, 'hello'))
task2 = asyncio.create_task(async_say(6, 'world'))
print(f"started at {time.strftime('%X')}")
await task1
await task2
print(f"finished at {time.strftime('%X')}")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
En dehors:
AttributeError: module 'asyncio' has no attribute 'create_task'
J'ai donc essayé avec l'extrait de code suivant (.ensure_future()
) à la place, sans aucun problème:
async def main():
task1 = asyncio.ensure_future(async_say(4, 'hello'))
task2 = asyncio.ensure_future(async_say(6, 'world'))
print(f"started at {time.strftime('%X')}")
await task1
await task2
print(f"finished at {time.strftime('%X')}")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
En dehors:
started at 13:19:44
hello
world
finished at 13:19:50
[ [~ # ~] note [~ # ~] ]:
[MISE À JOUR]:
Avec emprunt à @ tilisateur4815162342 Réponse , mon problème résolu:
async def main():
loop = asyncio.get_event_loop()
task1 = loop.create_task(async_say(4, 'hello'))
task2 = loop.create_task(async_say(6, 'world'))
print(f"started at {time.strftime('%X')}")
await task1
await task2
print(f"finished at {time.strftime('%X')}")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Le create_task
la fonction de niveau supérieur a été ajoutée dans Python 3.7, et vous utilisez Python 3.6. Avant la version 3.7, create_task
n'était disponible qu'en tant que méthode sur la boucle d'événement, vous pouvez donc l'invoquer comme ça:
async def main():
loop = asyncio.get_event_loop()
task1 = loop.create_task(async_say(4, 'hello'))
task2 = loop.create_task(async_say(6, 'world'))
Cela fonctionne dans les versions 3.6 et 3.7, ainsi que dans les versions antérieures. asyncio.ensure_future
fonctionnera également, mais lorsque vous savez que vous avez affaire à une coroutine, create_task
est plus explicite et correspond à l'option préférée .