async/await ve asyncio nasıl çalışır? Ne zaman thread veya process yerine tercih edilir?

Cevap

asyncio, tek thread üzerinde çalışan bir event loop ile eşzamanlılık (concurrency) sağlar. async def ile tanımlanan fonksiyon çağrıldığında hemen çalışmaz, bir coroutine nesnesi döner. await, coroutine'i I/O beklerken askıya alır ve kontrolü event loop'a bırakır; loop bu sürede başka görevleri çalıştırır.

import asyncio
import httpx

async def getir(client, url):
    r = await client.get(url)
    return r.status_code

async def main():
    urls = [f"https://api.example.com/items/{i}" for i in range(100)]
    async with httpx.AsyncClient() as client:
        sonuclar = await asyncio.gather(*(getir(client, u) for u in urls))
    print(sonuclar)

asyncio.run(main())

100 istek sırayla değil, eşzamanlı bekletilir; toplam süre yaklaşık en yavaş isteğin süresi kadar olur.

Temel kavramlar

  • asyncio.create_task(coro): coroutine'i arka planda zamanlar.
  • asyncio.gather / TaskGroup (3.11+): birden çok görevi birlikte bekler.
  • asyncio.Semaphore: aynı anda çalışan görev sayısını sınırlar.
  • asyncio.wait_for(coro, timeout=5): zaman aşımı ekler.

En sık hata: event loop'u bloklamak

async fonksiyon içinde time.sleep(), requests.get() veya ağır CPU hesabı yapılırsa tüm loop durur. Çözüm: await asyncio.sleep(), async kütüphaneler (httpx, asyncpg) ya da bloklayan kodu await asyncio.to_thread(fonk) ile thread'e taşımak.

Hangisini seçmeli?

İş yüküTercih
Çok sayıda ağ/DB beklemesi (I/O-bound)asyncio
I/O-bound ama kütüphane senkronthreading
CPU-bound (hesaplama, görüntü işleme)multiprocessing

asyncio paralellik değil eşzamanlılık sağlar; GIL nedeniyle CPU-bound işi hızlandırmaz.

  1. list ve tuple arasındaki fark nedir?KolayPythonBackend
  2. Varsayılan argüman olarak liste vermek neden tehlikelidir?OrtaPythonBackend
  3. Decorator nedir? Basit bir zamanlama decorator'ı yazın.OrtaPythonBackend
  4. Generator nedir, yield ne yapar?OrtaPythonBackend
  5. GIL nedir ve çoklu iş parçacığını nasıl etkiler?ZorPythonBackend
  6. dataclass nedir? Normal sınıf, NamedTuple ve Pydantic ile farkı nedir?OrtaPythonBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle