Portál AbcLinuxu, 25. května 2024 16:21


Dotaz: Asyncio: Rozdíl tasků, jen list vs list s create_task()

27.11.2023 01:27 Olaf
Asyncio: Rozdíl tasků, jen list vs list s create_task()
Přečteno: 278×
Odpovědět | Admin
Chystám se některé své kódy, u kterých je to možné, oprostit od kombinace Redis + RQ. A to tak, že je přepisuji v Pythonu pomocí využití asyncio. Chci se zeptat, jaký je rozdíl mezi tím, když použiji jen seznam funkcí, které se mají spustit, a když tento seznam bude sestávat z opravdových asyncio tasků definovaných pomocí asyncio.create_task()? Protože v obou případech je časový výsledek týž (viz kód níže). Jde říct, že pomocí create_task() lze pracovat s výjimkami tak, že mi nespadne během chyby běh komplet celého seznamu?

Totálně primitivní příklad:
async def fetch_url(url):
    print(f"Getting {url}...")
    await asyncio.sleep(0.5)
    return "Response OK. Done"
Verze pouze s prostým listem:
async def main():
    start_time = time.time()
    tasks = [fetch_url(url) for url in URLS]

    results = await asyncio.gather(*tasks)
    end_time = time.time()
    elapsed = end_time - start_time
    print(f"Fetching took {elapsed:.2f} seconds.")
    return results
Verze s asyncio taskem:
async def main():
    start_time = time.time()
    tasks = [asyncio.create_task(fetch_url(url)) for url in URLS]

    results = await asyncio.gather(*tasks)
    end_time = time.time()
    elapsed = end_time - start_time
    print(f"Fetching took {elapsed:.2f} seconds.")
    return results
V obou případech je čas běhu stejný, tj. 0,5 s, na rozdíl od synchronního kódu, kde pro 15 URL to trvá, jak by člověk čekal, 7,5 sekundy.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.11.2023 01:54 Olaf
Rozbalit Rozbalit vše Re: Asyncio: Rozdíl tasků, jen list vs list s create_task()
Odpovědět | | Sbalit | Link | Blokovat | Admin
OK, uvědomil jsem si, že asyncio.gather() dělá seznam tasků, takže kombinace s create_task() je zcela zbytečná.
27.11.2023 02:00 X
Rozbalit Rozbalit vše Re: Asyncio: Rozdíl tasků, jen list vs list s create_task()
Odpovědět | | Sbalit | Link | Blokovat | Admin
https://stackoverflow.com/questions/62528272/what-does-asyncio-create-task-do

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.