CodeBlanks Logo Icon CodeBlanks

wait

asyncio.wait ile ilk biteni beklemeyi öğrenirsin.

wait

asyncio.wait, bir grup coroutine ya da Task'ın tamamlanmasını bekler; ama hepsi bitene kadar bekleme zorunluluğu yoktur. İlk tamamlananı, ilk hatayı ya da hepsini bekleyecek şekilde ayarlanabilir.

done, pending = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED)

İki küme döner: done (tamamlananlar) ve pending (hâlâ bekleyenler). return_when parametresi ne zaman dönüleceğini belirler: ALL_COMPLETED, FIRST_COMPLETED ya da FIRST_EXCEPTION.

gather sonuçları sırayla döner; wait ise Task nesneleriyle çalışır ve daha ince denetim sağlar.

done ve pending kümeleri

wait'in döndürdüğü done kümesi tamamlanan Task'ları, pending kümesi hâlâ bekleyenleri içerir. Her iki küme de Task nesnelerinden oluşur.

İlk tamamlananla geri döndüğünde, pending kümesindeki Task'ları iptal edebilir ya da beklemeye devam edebilirsin. Bu, zaman aşımları ve iptal mantığı için kullanışlıdır.

for t in pending:
    t.cancel()

Bu denetim, gather'ın sağlamadığı bir esneklik sunar.

Uygulama wait ile ilk tamamlanan

import asyncio ile başla. async def slow() fonksiyonu await asyncio.sleep(0); return 42 yapsın. async def main() içinde tasks = [asyncio.create_task(slow())] listesi oluştur; done, pending = await asyncio.wait(tasks) çağrısı yapsın. return list(done)[0].result() ile ilk tamamlananın sonucunu 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
# slow adında bir coroutine tanımla; sıfır saniye bekle, 42 döndür
# main coroutine'i create_task ile Task listesi oluştur, wait ile bekle
# ilk tamamlanan Task'ın sonucunu döndür; main'i asyncio.run ile yazdır

Örnek çözüm

main.py
import asyncio

async def slow():
    await asyncio.sleep(0)
    return 42

async def main():
    tasks = [asyncio.create_task(slow())]
    done, pending = await asyncio.wait(tasks)
    return list(done)[0].result()

print(asyncio.run(main()))

Beklenen çıktı

42

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 wait return_when

Soru
done, pending = await asyncio.wait(tasks,
                                       return_when=asyncio.____)
Cevap
done, pending = await asyncio.wait(tasks,
                                       return_when=asyncio.FIRST_COMPLETED)

Açıklama: asyncio.FIRST_COMPLETED ilk tamamlananla geri döner.

2 wait kavramlarını eşleştir

Kavram Anlamı
asyncio.wait Task'ları bekler
done Tamamlananlar
pending Bekleyenler
FIRST_COMPLETED İlk tamamlanınca dön

3 asyncio.wait ne döndürür?

  • Yalnızca sonuç listesi
  • Tek bir Task
  • İki küme: done ve pending Doğru cevap
  • Hiçbir şey

Açıklama: wait done ve pending adlı iki küme döndürür.

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