Queue
- Python kursu
- İleri seviye
- Ders 33/83
- 5 dk
asyncio.Queue ile üretici-tüketici desenini öğrenirsin.
Queue
asyncio.Queue, coroutine'ler arasında güvenli veri aktarımı sağlar. Üretici (producer) veriyi put ile kuyruğa koyar; tüketici (consumer) get ile alır. Biri beklerken diğeri çalışır.
import asyncio
q = asyncio.Queue()
await q.put(1)
value = await q.get()Queue, arabellekli iletişim için kullanılır. Üretici hızlıysa ve tüketici yavaşsa, queue araya girer; aksi hâlde de tersi. Kuyruk dolunca put bekler, boşken get bekler.
Üretici-tüketici örüntüsü
Queue, klasik üretici-tüketici örüntüsünü uygular. Üretici coroutine veri üretip await q.put(item) ile kuyruğa koyar; tüketici coroutine await q.get() ile veriyi alır ve işler.
Üretici bittiğinde q.put(None) gibi bir son işaretçisi koyabilir; tüketici bunu görünce durur. Birden çok tüketici de desteklenir; her biri ayrı bir Task'ta çalışır.
Queue, asyncio'da bu örüntüyü güvenli ve ölçeklenebilir hâle getirir; kilite gerek kalmaz.
Uygulama Queue ile üretici-tüketici
import asyncio ile başla. async def producer(q) fonksiyonu await q.put(42) ve await q.put(None) yapsın. async def consumer(q) fonksiyonu value = await q.get() ile veriyi alıp döndürsün. async def main() içinde q = asyncio.Queue() oluştur, asyncio.gather(producer(q), consumer(q)) ç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
# producer(q): 42 ve None koy
# consumer(q): veriyi al ve döndür
# main: Queue oluştur, gather ile ikisini çalıştır, sonucu yazdırÖrnek çözüm
import asyncio
async def producer(q):
await q.put(42)
await q.put(None)
async def consumer(q):
value = await q.get()
return value
async def main():
q = asyncio.Queue()
return await asyncio.gather(producer(q), consumer(q))
print(asyncio.run(main()))Beklenen çıktı
[None, 42]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Queue metotlarını eşleştir
| Kavram | Anlamı |
|---|---|
q.put(item) |
Veriyi koyar |
q.get() |
Veriyi alır |
q.qsize() |
Boyutu verir |
await q.put |
Yer açılana kadar bekler |
2 Queue boşken await q.get() ne yapar?
- Hemen None döndürür
- Hata fırlatır
- Programı kapatır
- Veri gelene kadar bekler Doğru cevap
Açıklama: q.get() veri gelene kadar bekler; await ile olay döngüsü serbest kalır.
3 Queue import ve tanım
import asyncio
q = asyncio.____()
import asyncio
q = asyncio.Queue()
Açıklama: asyncio.Queue() yeni bir kuyruk oluşturur.