Korütinler ve Olay Döngüsü
async def ile korütinler tanımlayın ve bunları asyncio.run() ile çalıştırın.
Korütinler ve Olay Döngüsü, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
Eşzamanlılık Nedir
Asyncio, işbirlikçi eşzamanlılık sağlar: tek bir iş parçacığı, biri G/Ç beklerken görevler arasında geçiş yaparak birçok görevi yönetir.
# Traditional: blocking I/O holds the whole thread
# Asyncio: while waiting for I/O, run other coroutines
import asyncio
async def main():
print("Hello")
await asyncio.sleep(1) # yield control
print("World")
asyncio.run(main())async def — Eş Yordam İşlevleri
async def ile tanımlanan işlevler eş yordam işlevleridir. Bunları çağırmak bir eş yordam nesnesi döndürür; işlevler yalnızca beklendiğinde veya zamanlandığında çalışır.
import asyncio
async def greet(name):
return f"Hello, {name}"
result = asyncio.run(greet("Alice"))
print(result) # Hello, AliceOlay Döngüsü
Olay döngüsü, eş yordamların çalıştırılmasını yönetir. asyncio.run(coro) yeni bir olay döngüsü oluşturur, eş yordamı tamamlanana kadar çalıştırır ve ardından döngüyü kapatır.
import asyncio
async def compute():
await asyncio.sleep(0)
return 42
value = asyncio.run(compute())
print(value) # 42
# For advanced use:
loop = asyncio.new_event_loop()
result = loop.run_until_complete(compute())
loop.close()await Çalışmayı Duraklatır
await expr, expr (başka bir eş yordam veya gelecek nesnesi) tamamlanana kadar geçerli eş yordamı askıya alır. Bu sırada olay döngüsü diğer görevleri çalıştırır.
import asyncio
async def task(name, delay):
print(f"{name} starting")
await asyncio.sleep(delay)
print(f"{name} done")
async def main():
await task("A", 2)
await task("B", 1) # sequential here
asyncio.run(main())asyncio.sleep()
asyncio.sleep(seconds), olay döngüsünü engellemeden geçerli eş yordamı belirtilen süre boyunca askıya alır.
import asyncio
async def heartbeat():
while True:
print("ping")
await asyncio.sleep(1)
# asyncio.run(heartbeat()) # runs foreverasyncio.run() Giriş Noktası
asyncio.run(coro), standart üst düzey giriş noktasıdır. Çalışmakta olan bir olay döngüsünün içinden bunu asla çağırmayın.
import asyncio
async def main():
print("running")
if __name__ == "__main__":
asyncio.run(main())Olay Döngüsünün İçinde Olup Olmadığını Denetleme
Bir döngünün zaten çalışıp çalışmadığını algılamak için asyncio.get_running_loop() kullanın (çalışmıyorsa RuntimeError oluşturur).
import asyncio
async def inner():
loop = asyncio.get_running_loop()
print(f"Loop: {loop}")
asyncio.run(inner())Engelleyici Kodu Çalıştırma
loop.run_in_executor(None, func, *args) kullanarak CPU'ya bağlı veya G/Ç işlemlerini engelleyen kodu olay döngüsünü engellemeden çalıştırın.
import asyncio, time
def blocking():
time.sleep(2)
return "done"
async def main():
loop = asyncio.get_event_loop()
result = await loop.run_in_executor(None, blocking)
print(result)
asyncio.run(main())Eş Yordam Zincirleme
Eş yordamlar başka eş yordamları await edebilir ve bir zincir oluşturabilir. Her düzey tamamlandıkça denetim zincir boyunca aşağıya iner ve yukarı döner.
import asyncio
async def fetch_data():
await asyncio.sleep(1)
return {"value": 42}
async def process():
data = await fetch_data()
return data["value"] * 2
async def main():
result = await process()
print(result) # 84
asyncio.run(main())Eş Yordamları Belirleme
Çalışma zamanında asenkron işlevleri incelemek için asyncio.iscoroutine(obj) veya asyncio.iscoroutinefunction(func) kullanın.
import asyncio
async def my_coro():
pass
print(asyncio.iscoroutinefunction(my_coro)) # True
coro = my_coro()
print(asyncio.iscoroutine(coro)) # True
coro.close() # clean up the un-awaited coroutineasyncio Hata Ayıklama Kipi
Beklenmemiş eş yordamları, yavaş geri çağrıları ve diğer sorunları algılamak için hata ayıklama kipini etkinleştirin: PYTHONASYNCIODEBUG=1 ayarını yapın veya asyncio.run işlevine debug=True aktarın.
import asyncio
async def main():
pass
asyncio.run(main(), debug=True)
# Or:
# PYTHONASYNCIODEBUG=1 python script.pyHızlı Kontrol
asyncio.run(coro) ne yapar?
Özet
Eş yordamları async def ile tanımlayın, asyncio.run() ile çalıştırın ve await ile askıya alın. Olay döngüsü eş yordamları işbirlikçi biçimde zamanlar; biri G/Ç beklerken diğerlerini çalıştırır.
Sıkça Sorulan Sorular
“Korütinler ve Olay Döngüsü” dersi ücretsiz mi?
Evet — “Korütinler ve Olay Döngüsü” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“Korütinler ve Olay Döngüsü” dersinde ne öğreneceğim?
async def ile korütinler tanımlayın ve bunları asyncio.run() ile çalıştırın. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Korütinler ve Olay Döngüsü” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Korütinler ve Olay Döngüsü
- await, Görevler ve Toplama
- Asenkron Bağlam Yöneticileri ve Yineleyiciler
- Üretim Ortamlarında Asenkron G/Ç Kalıpları