================================================================================================================
Python, yazılım geliştiricileri için vazgeçilmez bir araç haline geldi. Hızlı prototipleme, kolay sözdizimi ve geniş kütüphane desteği sayesinde her seviyeden geliştiriciye hitap ediyor. Ancak, bazı uygulamalarda performans gereksinimleri devreye girdiğinde, geleneksel senkron programlamanın yetersiz kaldığını görebiliyoruz. Bu noktada devreye giren asenkron programlama, uygulamaların daha hızlı ve verimli çalışmasını sağlıyor.
Bu yazımızda, Python’daki asenkron programlama hakkında bilgi verecek ve geleneksel senkron kodu nasıl asenkrona çevirebileceğinizi adım adım göstererek, performans artışlarını nasıl elde edebileceğinizi anlatacağız.
Asenkron Programlama Nedir?
Geleneksel senkron kodda, bir işlem tamamlanmadan diğer işlem başlamaz. Ancak asenkron programlamada, işlemler birbiriyle paralel olarak gerçekleşebilir. Bu, özellikle ağ istekleri, dosya okuma/yazma gibi işlemler için büyük bir avantaj sağlar.
Python’da Asenkron Programlama Nasıl Yapılır?
Örneğin, klasik bir senkron fonksiyon şu şekilde olabilir:
```python
import time
def uzun_islem():
time.sleep(2) # 2 saniye bekle
print("İşlem tamamlandı")
def main():
uzun_islem()
print("Ana fonksiyon bitti")
```
Bu kod, `uzun_islem` fonksiyonu çalıştırıldığında 2 saniye bekler ve ardından `Ana fonksiyon bitti` mesajını ekrana yazdırır. Ancak bu durumda, işlem süreleri birbirini engeller ve uygulama yavaşlar.
# Asenkron hale getirmek
```python
import asyncio
async def uzun_islem():
await asyncio.sleep(2) # 2 saniye bekle
print("İşlem tamamlandı")
async def main():
await asyncio.gather(uzun_islem()) # Asenkron işlemi başlat
print("Ana fonksiyon bitti")
# Asenkron fonksiyonu çalıştırmak için:
asyncio.run(main())
```
Bu kodda, `async` anahtar kelimesi, fonksiyonun asenkron olduğunu belirtirken, `await` anahtar kelimesi ise işlemin tamamlanmasını beklerken diğer işlemlerin devam etmesine olanak tanır. Artık, `uzun_islem()` fonksiyonu 2 saniye beklerken, diğer görevler engellenmez.
Performans Artışı
Bir web sunucusu geliştirirken, geleneksel senkron programlama her isteği sırayla işlemek zorunda kalırken, asenkron programlama bu istekleri aynı anda işlemeyi mümkün kılar.
# Örnek: Asenkron API İstekleri
```python
import requests
def veri_al():
response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(response.status_code)
def main():
for _ in range(10):
veri_al() # Her isteği sırasıyla gönder
print("Tüm işlemler tamamlandı")
```
Bu kodda, her bir API isteği sırayla yapılır ve her isteğin tamamlanması beklenir. Bu süreç oldukça zaman alıcı olabilir.
Ancak, bu kodu asenkron hale getirdiğimizde, aynı işlemi daha hızlı bir şekilde gerçekleştirebiliriz:
```python
import aiohttp
import asyncio
async def veri_al():
async with aiohttp.ClientSession() as session:
async with session.get('https://jsonplaceholder.typicode.com/posts') as response:
print(response.status)
async def main():
tasks = [veri_al() for _ in range(10)]
await asyncio.gather(*tasks) # Tüm işlemleri aynı anda yap
asyncio.run(main())
```
Bu asenkron versiyon, 10 isteği paralel olarak gönderir ve her birinin yanıtını beklemeden diğerlerine devam eder, böylece işlem süresi ciddi şekilde kısalır.
Sonuç: Asenkron Programlamanın Gücü
Eğer uygulamanızda daha fazla paralel işlem gerçekleştirmek ve performans kazançları sağlamak istiyorsanız, asenkron programlama kesinlikle dikkate almanız gereken bir konu. Asenkron kodlama, Python ile çalışırken daha verimli bir yaklaşım elde etmenize yardımcı olacaktır.