Yükleniyor...

Asyncio

Asyncio, Python’da asenkron programlama için kullanılan güçlü bir kütüphanedir. Özellikle I/O-bound işlemler, ağ çağrıları, veritabanı erişimi ve dosya işlemleri gibi uzun süren görevlerde uygulamanın ana iş parçacığının bloke olmasını önler. Asyncio sayesinde uygulamalar yüksek performanslı, ölçeklenebilir ve tepki süresi düşük bir şekilde çalışabilir.
Yazılım geliştirme ve sistem mimarisi bağlamında Asyncio, backend uygulamaları, mikroservisler, gerçek zamanlı veri işleme ve yüksek kullanılabilirlik gerektiren sistemlerde yaygın olarak kullanılır. Temel kavramlar arasında coroutines (async/await), event loop yönetimi, asyncio.gather veya asyncio.wait ile görev planlaması, kaynakların asenkron yönetimi ve OOP prensipleriyle modüler tasarım yer alır. Algoritmalar ve veri yapıları, asenkron mantık çerçevesinde optimize edilmelidir.
Bu eğitim sonunda okuyucu, Asyncio ile etkin asenkron uygulamalar geliştirebilecek, coroutines ve event loop yönetimini anlayacak ve bellek sızıntıları veya hatalı istisna yönetimi gibi yaygın hatalardan kaçınabilecektir. Ayrıca pratik örnekler aracılığıyla problem çözme yetenekleri gelişecek ve yazılım geliştirmede gerçek dünya senaryolarına uygulanabilir bilgi kazanacaktır.

Temel Örnek

python
PYTHON Code
import asyncio

async def selamla(isim):
await asyncio.sleep(1)
print(f"Merhaba, {isim}!")

async def main():
görevler = \[selamla("Ahmet"), selamla("Ayşe"), selamla("Mehmet")]
await asyncio.gather(*görevler)

if name == "main":
asyncio.run(main())

Bu kod temel Asyncio kavramlarını göstermektedir: coroutines, event loop ve görev planlaması. selamla fonksiyonu bir coroutine olarak tanımlanmıştır ve await asyncio.sleep(1) ile bloklamayan bir bekleme simülasyonu yapılır. Event loop, bu bekleme süresinde diğer görevleri çalıştırabilir.
main fonksiyonu, görev listesini oluşturur ve asyncio.gather ile hepsini eş zamanlı olarak çalıştırır. asyncio.run, event loop’u başlatır ve coroutine tamamlandığında düzgün şekilde kapatır, böylece bellek sızıntıları önlenir. Bu model, çoklu API çağrıları, bildirim gönderimleri veya I/O işlemlerinin paralel yürütülmesi için idealdir. Yeni başlayanlar için önemli bir nokta: await, yalnızca coroutine içinde kullanılabilir; aksi halde SyntaxError oluşur.

Pratik Örnek

python
PYTHON Code
import asyncio
import aiohttp

class APIClient:
def init(self, urls):
self.urls = urls

async def getir(self, session, url):
try:
async with session.get(url) as response:
data = await response.text()
print(f"{url} alındı: {len(data)} karakter")
except Exception as e:
print(f"{url} alınırken hata oluştu: {e}")

async def calistir(self):
async with aiohttp.ClientSession() as session:
görevler = [self.getir(session, url) for url in self.urls]
await asyncio.gather(*görevler)

if name == "main":
urls = \["[https://example.com](https://example.com)", "[https://httpbin.org/get](https://httpbin.org/get)", "[https://jsonplaceholder.typicode.com/posts](https://jsonplaceholder.typicode.com/posts)"]
client = APIClient(urls)
asyncio.run(client.calistir())

Bu örnek, Asyncio’nun gerçek dünya uygulamalarında nasıl kullanılacağını gösterir. APIClient sınıfı, OOP prensiplerine uygun olarak tasarlanmıştır. getir coroutine’i async with kullanarak kaynakları güvenli şekilde yönetir ve await session.get(url) ile event loop’un diğer görevleri çalıştırmasına izin verir.
calistir fonksiyonu tüm görevleri asyncio.gather ile paralel olarak çalıştırır. try/except bloğu, ağ hatalarının diğer görevleri etkilemesini engeller. Bu yaklaşım, web scraping, API veri çekme veya paralel I/O işlemleri için uygundur. OOP ve Asyncio kombinasyonu, modüler ve test edilebilir bir yapı sağlar.

En iyi uygulamalar ve yaygın hatalar:
Coroutines’i net şekilde tanımlamak, görevleri gather veya wait ile çalıştırmak, async with ile kaynak yönetimi yapmak ve istisnaları yakalamak önemlidir. Event loop’u başlatmak için her zaman asyncio.run kullanın.
Yaygın hatalar: await’i coroutine dışında kullanmak, istisnaları göz ardı etmek, I/O işlemlerini ardışık yapmak ve kaynakları serbest bırakmamak. Hata ayıklama için debug mode açmak, aktif görevleri izlemek ve detaylı logging yapmak önerilir. Optimizasyon: gereksiz await kullanmamak, görevleri gruplamak ve bloklayıcı işlemlerden kaçınmak. Güvenlik: girişleri doğrulamak ve hataları yönetmek.

📊 Referans Tablosu

Element/Concept Description Usage Example
Coroutine Duraklayabilen ve yeniden başlatılabilen fonksiyon async def veri_getir(): await asyncio.sleep(1)
async/await Coroutines’i tanımlamak ve çalıştırmak için anahtar kelimeler async def islem(): await veri_getir()
Event Loop Coroutines ve görevleri yöneten yapı loop = asyncio.get_event_loop()
asyncio.gather Birden çok görevi eş zamanlı çalıştırır await asyncio.gather(görev1, görev2)
async with Asenkron kaynak yönetimi async with aiohttp.ClientSession() as session

Özet ve sonraki adımlar:
Asyncio, ölçeklenebilir ve verimli backend sistemleri geliştirmek için kritik öneme sahiptir. Coroutines, görev planlama, event loop yönetimi ve kaynak yönetimi konularını kavramak, gecikmeleri azaltır ve kodu asenkron, temiz ve sürdürülebilir hale getirir.
Asyncio’dan sonra aiohttp, aiomysql ve asyncpg gibi kütüphanelerle HTTP ve veri tabanı işlemlerini keşfetmek faydalıdır. Küçük görevlerle başlayıp, mikroservisler, gerçek zamanlı veri işleme ve background işleri uygulamaya geçmek önerilir. POO ve Asyncio kombinasyonu modüler, okunabilir ve test edilebilir bir yapı sağlar.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu konudaki anlayışınızı pratik sorularla test edin.

4
Sorular
🎯
70%
Geçmek İçin
♾️
Süre
🔄
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek