Asyncio, Python'da paralel işlem yapmanın ve zaman yönetimini daha verimli hale getirmenin anahtarıdır. Hem performansı artırabilir, hem de işlem sürelerini kısaltabilirsiniz. Hadi gelin, asyncio ile paralel işlem yapmanın 5 farklı yoluna göz atalım ve nasıl etkili bir şekilde zamanınızı yönetebileceğinizi keşfedelim.
1. Asyncio Nedir ve Neden Kullanılır?
Örnek:
```python
import asyncio
async def say_hello():
print("Merhaba!")
await asyncio.sleep(1)
print("Python'a hoş geldiniz.")
# Event loop başlat
asyncio.run(say_hello())
```
Bu basit örnekte, `say_hello` fonksiyonu 1 saniye uyutuluyor, ancak bu süre zarfında diğer işlemler yapılabilir. Böylece zaman kaybı yaşanmadan işlemler gerçekleşir.
2. Paralel İşlem Yapmak için Asyncio ile "Tasks" Kullanma
Örnek:
```python
import asyncio
async def task_1():
print("Task 1 başladı")
await asyncio.sleep(2)
print("Task 1 tamamlandı")
async def task_2():
print("Task 2 başladı")
await asyncio.sleep(1)
print("Task 2 tamamlandı")
async def main():
await asyncio.gather(task_1(), task_2())
asyncio.run(main())
```
Bu örnekte, `task_1` ve `task_2` aynı anda çalışmaya başlar ve zaman kaybı olmadan sonuçlar alınır.
3. Asyncio ile I/O Operasyonlarını Verimli Hale Getirme
Örnek:
```python
import asyncio
async def download_file(file_url):
print(f"{file_url} indiriliyor...")
await asyncio.sleep(3) # Simüle edilen indirme süresi
print(f"{file_url} indirildi.")
async def main():
urls = ['file1.jpg', 'file2.jpg', 'file3.jpg']
await asyncio.gather(*(download_file(url) for url in urls))
asyncio.run(main())
```
Burada, üç dosya paralel olarak indirilmeye çalışılıyor, böylece her bir dosyanın indirilme süresi kısalıyor.
4. Zamanlayıcılar Kullanarak Görevleri Zamanlama
Örnek:
```python
import asyncio
async def scheduled_task():
while True:
print("Görev çalışıyor...")
await asyncio.sleep(5)
asyncio.run(scheduled_task())
```
Bu görev 5 saniyede bir çalışacak şekilde planlandı ve asenkron olarak işlem yapmaya devam edecek.
5. Asyncio ile Hata Yönetimi
Örnek:
```python
import asyncio
async def risky_task():
raise Exception("Bir hata oluştu!")
async def main():
try:
await risky_task()
except Exception as e:
print(f"Hatayı yakaladık: {e}")
asyncio.run(main())
```
Bu örnekte, `risky_task()` fonksiyonu bir hata fırlatıyor, ancak bu hata `try-except` bloğuyla yakalanıyor ve işlem devam ediyor.