Üretim Ortamlarında Asenkron G/Ç Kalıpları
asyncio'yu HTTP istemcilerine, kuyruklara ve gerçek dünya işlem hatlarına uygulayın.
Üretim Ortamlarında Asenkron G/Ç Kalıpları, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 4. 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.
Olay Döngüsü için En İyi Uygulamalar
Tek giriş noktası olarak her zaman asyncio.run() kullanın. Senkron ve eşzamansız kodu dikkatsizce birbirine karıştırmaktan kaçının ve uzun süren işlemci çalışmalarını kullanarak olay döngüsünü asla engellemeyin.
import asyncio
async def main():
# Never: time.sleep() — blocks the event loop
# Always: await asyncio.sleep()
await asyncio.sleep(1)
asyncio.run(main())Bağlantı Havuzu Kullanımı
Her istek için yeni bir bağlantı açmak yerine bağlantıları yeniden kullanın. asyncpg ve aiohttp gibi kitaplıklar yerleşik havuzlar sunar.
# pip install asyncpg
import asyncpg, asyncio
async def main():
pool = await asyncpg.create_pool(
dsn="postgresql://user:pass@host/db",
min_size=5, max_size=20
)
async with pool.acquire() as conn:
row = await conn.fetchrow("SELECT 1")
await pool.close()asyncio.Queue ile Üretici-Tüketici
asyncio.Queue, eşzamanlı görevler olarak çalışan üreticilerle tüketicileri birbirinden bağımsızlaştırır.
import asyncio
async def producer(q):
for i in range(5):
await q.put(i)
await asyncio.sleep(0.5)
await q.put(None) # sentinel
async def consumer(q):
while (item := await q.get()) is not None:
print(f"processing {item}")
q.task_done()
async def main():
q = asyncio.Queue()
await asyncio.gather(producer(q), consumer(q))
asyncio.run(main())Semaphore ile Hız Sınırlama
Dış API'leri aşırı yüklememek veya hız sınırlarına takılmamak için eşzamanlı giden isteklerin sayısını sınırlayın.
import asyncio, aiohttp
SEM = asyncio.Semaphore(10) # 10 concurrent requests max
async def fetch(session, url):
async with SEM:
async with session.get(url) as r:
return await r.json()
async def main(urls):
async with aiohttp.ClientSession() as s:
return await asyncio.gather(*[fetch(s, u) for u in urls])Üstel Geri Çekilmeyle Yeniden Deneme
Geçici hataları düzgün bir şekilde ele almak için yeniden denenebilir işlemleri geri çekilme mantığıyla sarın.
import asyncio
async def retry(coro_fn, retries=3, base=1):
for attempt in range(retries):
try:
return await coro_fn()
except Exception as e:
if attempt == retries - 1: raise
delay = base * 2 ** attempt
await asyncio.sleep(delay)Düzgün Kapatma
Uzun süre çalışan görevlerde asyncio.CancelledError hatasını yakalayın ve düzgün bir şekilde kapanmak için OS sinyallerini işleyin.
import asyncio, signal
async def server():
stop = asyncio.Event()
loop = asyncio.get_running_loop()
loop.add_signal_handler(signal.SIGINT, stop.set)
await stop.wait()
print("Shutting down gracefully")Yanıtları Akışla İşleme
Büyük yanıtların tamamını belleğe yüklemeden akışla işlenmesi için eşzamansız üreteçleri kullanın.
import asyncio, aiohttp
async def stream(url):
async with aiohttp.ClientSession() as s:
async with s.get(url) as r:
async for chunk in r.content.iter_chunked(4096):
process(chunk)
async def process(chunk):
await asyncio.sleep(0)
print(len(chunk), "bytes")FastAPI'de Arka Plan Görevleri
FastAPI'nin BackgroundTasks özelliği, yanıt gönderildikten sonra çalıştırılacak işleri kuyruğa alarak uç noktaların hızlı kalmasını sağlar.
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
def send_email(to: str, body: str):
# heavy synchronous work
pass
@app.post("/register")
async def register(email: str, bg: BackgroundTasks):
bg.add_task(send_email, email, "Welcome!")
return {"status": "registered"}Kalp Atışı Deseni
create_task kullanarak ana sunucu döngüsünün yanında düzenli aralıklarla çalışan bir arka plan görevi yürütün.
import asyncio
async def heartbeat():
while True:
print("alive")
await asyncio.sleep(30)
async def main():
asyncio.create_task(heartbeat())
await serve_forever()Eşzamansız Kodu Profilleme
Eşzamansız kodu dikkate alan profilleme için yappi veya py-spy kullanın. Yavaş geri çağırmalarla ilgili uyarılar için asyncio hata ayıklama kipini etkinleştirin.
# Enable debug to catch slow callbacks:
# asyncio.run(main(), debug=True)
# PYTHONASYNCIODEBUG=1 python server.py
# logs: Executing <Task coroutine=...> took 0.150 secondsYaygın Tuzaklardan Kaçınma
Temel kurallar: engelleyici kodu olay döngüsünde asla çağırmayın; korutinleri her zaman bekleyin; kapatma sırasında görevleri iptal edin; bağlantı havuzlarını kullanın; eşzamanlılığı semaforlarla sınırlayın.
import asyncio
async def bad():
import time
time.sleep(2) # blocks the entire event loop!
async def good():
await asyncio.sleep(2) # yields controlHızlı Kontrol
Eşzamanlı görevler olarak çalışan üreticilerle tüketicileri birbirinden bağımsızlaştıran asyncio ilkeli hangisidir?
Özet
Üretim ortamındaki eşzamansız desenler: bağlantı havuzları kullanın, eşzamanlılığı Semaphore ile denetleyin, yeniden deneme ve geri çekilme uygulayın, büyük verileri akışla işleyin, sinyaller geldiğinde düzgün şekilde kapanın ve create_task ile düzenli aralıklarla çalışan görevler yürütün.
Sıkça Sorulan Sorular
“Üretim Ortamlarında Asenkron G/Ç Kalıpları” dersi ücretsiz mi?
Evet — “Üretim Ortamlarında Asenkron G/Ç Kalıpları” 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.
“Üretim Ortamlarında Asenkron G/Ç Kalıpları” dersinde ne öğreneceğim?
asyncio'yu HTTP istemcilerine, kuyruklara ve gerçek dünya işlem hatlarına uygulayı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 4. dersidir.
“Üretim Ortamlarında Asenkron G/Ç Kalıpları” 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ı