lima-city: Webhosting, Domains und Cloud
1 Pluspunkt 0 Minuspunkte

Wie greife ich auf laufende Tasks zu wenn ich die Tasks mit asyncio.creeate_task(...) erstelle?

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}")
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Du kannst mit

asyncio.all_tasks()

auf alle aktuell laufenden Tasks im Event-Loop zugreifen. Hier ist ein Beispiel bei dem alle Tasks mit ungeraden Parametern nach der ersten Ausgabe abgebrochen werden.

import asyncio
import time

async def say_hello(n):
    print(f"Hello {n}...")
    try:
        await asyncio.sleep(2)
        print(f"...World {n}!")
    except asyncio.CancelledError:
        print(f"Task {n} wurde abgebrochen.")
        raise

async def main():
    tasks = []

    for i in range(1, 6):
        task = asyncio.create_task(say_hello(i))
        tasks.append((i, task))

    await asyncio.sleep(0.1)  # kurz warten, damit Tasks gestartet sind

    # Ungerade Tasks abbrechen
    for n, task in tasks:
        if n % 2 == 1:
            task.cancel()

    # Alle Tasks abwarten (auch abgebrochene)
    for _, task in tasks:
        try:
            await task
        except asyncio.CancelledError:
            pass  # ignorieren, da erwartet

start = time.time()
asyncio.run(main())
print(f"Duration: {time.time() - start:.2f} Sekunden")
von (481 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Beiträge bewerten
  • Inhalte bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft. Unser Ziel: Guter Inhalt. Für alle.

2.3k Fragen

2.8k Antworten

253 Kommentare

11 Nutzer