CodeBlanks Logo Icon CodeBlanks

Async katmanı

async/await ve aiohttp ile veri akışı kurarsın.

Async katmanı

İkinci katman, asyncio.gather ile birden fazla kaynaktan eşzamanlı getirme yapar. gather, kendisine verilen tüm coroutine'leri bekler ve sonuçları liste olarak döndürür.

async def fetch_all():
    return await asyncio.gather(
        fetch_tasks(), fetch_tasks()
    )

Burada fetch_tasks iki kez çağrılır; gather bunları eşzamanlı yürütür. Gerçek dünyada bu, iki HTTP kaynağını paralel sorgulamakla aynıdır; toplam süre en yavaş çağrı kadardır.

gather ve await

gather bir coroutine döndürür; sonucu almak için await kullanılır. await olmazsa coroutine nesnesi kalır; işlevin sonucu elde edilmez.

async def fetch_all():
    return await asyncio.gather(
        fetch_tasks(), fetch_tasks()
    )

Her bir çağrı ayrı bir kaynaktır; hepsi tamamlandığında gather döner. Bu desen, çok sayıda G/Ç işini hızlandırmak için async'nin temel avantajıdır.

Uygulama fetch_all işlevini ekle

Başlangıç kodu, önceki dersin fetch_tasks çözümünü içerir. Sen async def fetch_all(): işlevini ekle ve gövdesinde return await asyncio.gather(fetch_tasks(), fetch_tasks()) yapsın. Sonra print(asyncio.run(fetch_all())) ile sonucu yazdır.

Başlangıç kodu

main.py
import asyncio

async def fetch_tasks():
    return [{"id": 1, "title": "Görev 1"}, {"id": 2, "title": "Görev 2"}]

# fetch_all adlı async bir işlev tanımla
# asyncio.gather ile fetch_tasks'i iki kez çağırıp await'le
# asyncio.run ile fetch_all'u çalıştır ve sonucu yazdır

Örnek çözüm

main.py
import asyncio

async def fetch_tasks():
    return [{"id": 1, "title": "Görev 1"}, {"id": 2, "title": "Görev 2"}]

async def fetch_all():
    return await asyncio.gather(fetch_tasks(), fetch_tasks())

print(asyncio.run(fetch_all()))

Beklenen çıktı

[[{'id': 1, 'title': 'Görev 1'}, {'id': 2, 'title': 'Görev 2'}], [{'id': 1, 'title': 'Görev 1'}, {'id': 2, 'title': 'Görev 2'}]]

Soru ve cevaplar

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

1 asyncio.gather(fetch_tasks(), fetch_tasks()) ne döndürür?

  • İki listenin listesini Doğru cevap
  • Tek bir liste
  • Bir coroutine
  • Bir hata

Açıklama: gather her çağrının sonucunu sırayla listeye koyar; iki liste döner.

2 gather çağrısını tamamla

Soru
async def fetch_all():
    return await asyncio.____(fetch_tasks(), fetch_tasks())
Cevap
async def fetch_all():
    return await asyncio.gather(fetch_tasks(), fetch_tasks())

Açıklama: gather ile coroutine'leri eşzamanlı beklersin.

3 Async katman kavramlarını eşleştir

Kavram Anlamı
gather Eşzamanlı bekler
await Sonucu açar
fetch_all Çok kaynak işlevi
asyncio.run Olay döngüsü başlatır

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