Onur Oduncu
Ana SayfaHakkımdaProjelerBlogTeknolojilerİletişim
Onur Oduncu

Uzun ömürlü sistemler tasarlayan ve bilgisini paylaşan bir teknoloji portfolyosu.

© 2026 Onur Oduncu. Tüm hakları saklıdır.

Blog'a Dön

Python'da Asenkron Programlamaya Giriş: asyncio Temelleri

I/O yoğun Python uygulamalarında performansı artırmak için asyncio'nun temel kavramlarını örneklerle anlatıyorum.

14 Temmuz 20261 görüntülenme2 dk okuma
~/blog/python-asyncio-temelleri

Python'da Asenkron Programlamaya Giriş: asyncio Temelleri

Python'da asyncio, I/O yoğun işlemlerde (ağ istekleri, dosya okuma, veritabanı sorguları) tek thread üzerinde eşzamanlılık sağlamak için kullanılan güçlü bir araç. Ancak doğru anlaşılmadığında beklenmedik performans sorunlarına yol açabiliyor.

Coroutine ve Event Loop

async def ile tanımlanan bir fonksiyon, çağrıldığında hemen çalışmaz; bir coroutine nesnesi döner. Bu coroutine'in gerçekten çalışması için event loop tarafından zamanlanması gerekir.

async def fetch_data():
    await asyncio.sleep(1)
    return "veri"

async def main():
    result = await fetch_data()
    print(result)

asyncio.run(main())

await'in Gerçekten Ne Yaptığı

await, mevcut coroutine'in kontrolü event loop'a bırakmasını sağlar. Bu sırada event loop, bekleyen başka görevleri çalıştırabilir. Bu yüzden asyncio, CPU yoğun işlerde değil, bekleme süresi olan I/O işlemlerinde fayda sağlıyor.

asyncio.gather ile Paralel Çalıştırma

results = await asyncio.gather(
    fetch_data(url1),
    fetch_data(url2),
    fetch_data(url3),
)

Bu üç istek sırayla değil, eşzamanlı olarak beklemeye alınır. Sıralı çalıştırmaya göre toplam süre, en yavaş isteğin süresine yakın olur.

Yaygın Tuzak: CPU Yoğun İşlemleri asyncio ile Karıştırmak

asyncio tek thread üzerinde çalıştığı için, CPU yoğun bir hesaplama event loop'u bloke eder ve diğer tüm coroutine'lerin çalışmasını durdurur. Bu tür işler için multiprocessing veya thread pool executor kullanmak gerekir.

Sonuç

asyncio, doğru senaryoda (ağ istekleri, veritabanı I/O) kullanıldığında ciddi performans kazanımları sağlıyor. Yanlış senaryoda (CPU yoğun hesaplama) ise fayda sağlamıyor, hatta karmaşıklığı artırabiliyor.