Async katmanı
- Python kursu
- İleri seviye
- Ders 80/83
- 6 dk
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
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
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
async def fetch_all():
return await asyncio.____(fetch_tasks(), fetch_tasks())
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 |