gather
- Python kursu
- İleri seviye
- Ders 31/83
- 5 dk
asyncio.gather ile birden çok coroutine'i beklemeyi öğrenirsin.
gather
asyncio.gather, birden çok coroutine'i aynı anda başlatır ve hepsinin tamamlanmasını bekler. Sonuçları, verilen sırayla bir liste hâlinde döndürür.
import asyncio
async def fetch(n):
return n * 2
async def main():
results = await asyncio.gather(fetch(1), fetch(2), fetch(3))
return results # [2, 4, 6]gather, her çağrıyı sırayla başlatır; tamamı bitene kadar await eder. Biri hata verirse varsayılan olarak tüm gather hata fırlatır; ama return_exceptions=True ile hataları sonuç listesinde döndürebilirsin.
return_exceptions ve hata
gather'a geçirilen coroutine'lerden biri hata fırlatırsa, varsayılan olarak gather da hata fırlatır. Bu, hızlı başarısızlık istendiğinde iyidir.
Ama tüm sonuçları (hatalar dahil) görmek istersen return_exceptions=True kullanırsın. Hata nesneleri sonuç listesinde yer alır; işleme devam edebilirsin.
results = await asyncio.gather(
fetch(1), bad_fetch(),
return_exceptions=True)Bu seçenek, kısmı başarıların önemli olduğu durumlarda yararlıdır.
Uygulama gather ile paralel fetch
import asyncio ile başla. async def fetch(n) fonksiyonu return n * 2 yapsın. async def main() içinde await asyncio.gather(fetch(1), fetch(2), fetch(3)) çağrısı yapsın ve sonucu döndürsün. print(asyncio.run(main())) çağrısını ekle.
Başlangıç kodu
# asyncio modülünü içe aktar
# fetch adında bir coroutine tanımla; n değerini ikiye katlayıp döndürsün
# main coroutine'i gather ile üç fetch çağrısını beklesin
# main çağrısının sonucunu asyncio.run ile yazdırÖrnek çözüm
import asyncio
async def fetch(n):
return n * 2
async def main():
return await asyncio.gather(fetch(1), fetch(2), fetch(3))
print(asyncio.run(main()))Beklenen çıktı
[2, 4, 6]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 asyncio.gather sonuçları hangi sırada döndürür?
- Tamamlanma sırasına göre
- Çağrıldıkları sıraya göre Doğru cevap
- Rastgele sırayla
- Yalnızca ilk sonucu döndürür
Açıklama: gather, çağrıldıkları sıraya göre sonuç listesi döndürür; tamamlanma sırası önemli değildir.
2 gather çağrısı
import asyncio
async def main():
return await asyncio.____(fetch(1), fetch(2))
import asyncio
async def main():
return await asyncio.gather(fetch(1), fetch(2))
Açıklama: asyncio.gather(...) birden çok coroutine'i bekler.
3 gather kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
gather(*coros) |
Hepsini bekler |
çağrı sırası |
Sonuç sırası |
return_exceptions=True |
Hataları listeye koyar |
await gather(...) |
Tamamlanmayı bekler |