wait
- Python kursu
- İleri seviye
- Ders 32/83
- 5 dk
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
# 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
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
done, pending = await asyncio.wait(tasks,
return_when=asyncio.____)
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.