CodeBlanks Logo Icon CodeBlanks

gather

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

main.py
# 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

main.py
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ı

Soru
import asyncio

async def main():
    return await asyncio.____(fetch(1), fetch(2))
Cevap
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

İleri seviye bölümündeki tüm dersler