Portál AbcLinuxu, 25. května 2024 16:21
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 resultsVerze 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 resultsV 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.
asyncio.gather()
dělá seznam tasků, takže kombinace s create_task()
je zcela zbytečná.
Tiskni Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.