Jetzt habe ich zwei Varianten, die beide scheinbar "gleichzeitig" laufen aber ich verstehe trotzdem nicht so richtig, was der Unterschied ist. Hier sind die zwei Beispiele:
create_task
import asyncio
import time
async def say_hello(n):
print(f"Hello {n}...")
await asyncio.sleep(2)
print(f"...World {n}!")
async def main():
task1 = asyncio.create_task(say_hello(1))
task2 = asyncio.create_task(say_hello(2))
await task1
await task2
start = time.time()
asyncio.run(main())
print(f"Duration: {time.time() - start}")
gather
async def main():
await asyncio.gather(
say_hello(1),
say_hello(2)
)
Beides läuft in ca. 2 Sekunden – also wohl wirklich gleichzeitig. Aber was genau ist jetzt der Unterschied zwischen create_task() und gather()? Gibt es einen "richtigen" Weg? Oder macht das keinen Unterschied?
Und was wäre z. B., wenn ich später noch Tasks abbrechen oder überwachen will?