CodeBlanks Logo Icon CodeBlanks

Queue

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

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

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

Soru
import asyncio

q = asyncio.____()
Cevap
import asyncio

q = asyncio.Queue()

Açıklama: asyncio.Queue() yeni bir kuyruk oluşturur.

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