FastAPI ve Eşzamansız İşlemler
FastAPI'nin eşzamansız işlevleri nasıl doğal biçimde işlediğini ve engelleme yapmayan verimli kodun nasıl yazılacağını öğrenin.
FastAPI ve Eşzamansız İşlemler, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 2. 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, FastAPI Backend Development Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.
FastAPI's Async Foundation
FastAPI hız için tasarlanmıştır! Özellikle G/Ç (I/O) odaklı görevlerde birçok isteği eşzamanlı olarak işlemek için Python'ın asenkron özelliklerinden yararlanır.
Bu, veritabanları veya diğer API'ler gibi harici kaynakları beklerken bile API'nizin yanıt verebilir durumda kalacağı anlamına gelir.
Sync vs. Async Endpoints
FastAPI'de iki ana uç nokta işlevi türü tanımlayabilirsiniz:
- Senkron (
def): Bu işlevler çalıştıkları süre boyunca olay döngüsünü (event loop) bloklar. Eğer bir istek uzun sürerse, diğerleri bekleyebilir. - Asenkron (
async def): Bu işlevler, bir işlemi (veritabanından okuma gibi) beklerken 'duraklayabilir' ve diğer görevlerin çalışmasına izin vererek API'nizi bloklanamaz hale getirir.
Simple Synchronous Endpoint
İşte standart bir eşzamanlı uç nokta. Basit olsa da, time.sleep() gerçek ve yavaş bir veritabanı çağrısı olsaydı, tamamlanana kadar diğer istekleri engelleyecekti.
Çalıştırmayı deneyin ve hızlı bir şekilde birden fazla istek yapmaya çalışırsanız gecikmeyi gözlemleyin.
from fastapi import FastAPI
import uvicorn
import time
app = FastAPI()
@app.get("/sync_hello")
def sync_hello():
time.sleep(2) # Simulate a blocking I/O operation
return {"message": "Hello from sync endpoint!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Defining Asynchronous Endpoints
Uç noktanızı engelleyici olmayan (non-blocking) hale getirmek için async def kullanın. Bu, FastAPI'ye (ve Python'a) bu fonksiyonun askıya alınıp devam ettirilebileceğini söyler.
Bir async def fonksiyonu içinde, diğer asenkron işlemlerin tüm uygulamayı engellemeden tamamlanmasını beklemek için await anahtar kelimesini kullanırsınız.
Your First Async Endpoint
Bu örnek, eşzamansız bir uyku işlevi olan asyncio.sleep() kullanır. Ondan önceki await anahtar kelimesine dikkat edin.
Bu, FastAPI'nin bu istek 'uyurken' diğer istekleri de işlemesine olanak tanır ve sunucuyu daha hızlı yanıt verir hale getirir.
from fastapi import FastAPI
import uvicorn
import asyncio
app = FastAPI()
@app.get("/async_hello")
async def async_hello():
await asyncio.sleep(2) # Simulate non-blocking I/O
return {"message": "Hello from async endpoint!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)When to Go Async
async def, G/Ç (I/O) bağımlı işlemler için oldukça avantajlıdır. Bunlar, zamanlarının çoğunu başka bir şeyin gerçekleşmesini bekleyerek geçiren görevlerdir; örneğin:
- Harici API'lere istekte bulunmak (ör.
httpx). - Veritabanı sorgulamak (ör.
asyncpg,SQLModel). - Diskten dosya okumak/yazmak.
- Ağ iletişimi.
CPU bağımlı görevler (ağır hesaplamalar) için async def görevin kendisini hızlandırmaz, ancak sunucunun yanıt verebilir kalmasına yardımcı olabilir.
Interacting with Async Libraries
FastAPI async def uç noktanız başka bir asenkron kütüphane (asenkron bir HTTP istemcisi veya asenkron bir veritabanı sürücüsü gibi) ile etkileşime girmesi gerektiğinde await kullanmanız zorunludur.
await kullanmamak, awaitable nesnesinin çözülmüş sonucunun değil, doğrudan kendisinin döndürülmesine neden olur ki bu genellikle istediğiniz bir şey değildir!
Conceptual Async API Call
Başka bir servisten veri çektiğinizi hayal edin. Asenkron bir HTTP istemcisi, bunu engelleme olmadan yapmanıza olanak tanır. Kavramsal olarak bir async def uç noktası içinde şu şekilde görünür:
Engelleme yapmayan doğasını göstermek için asyncio.sleep ile ağ gecikmesini simüle ediyoruz.
from fastapi import FastAPI
import uvicorn
import asyncio
app = FastAPI()
@app.get("/fetch_data")
async def fetch_external_data():
# In a real app, you'd use an async HTTP client like 'httpx'
# async with httpx.AsyncClient() as client:
# response = await client.get("https://api.example.com/data")
# data = response.json()
await asyncio.sleep(1) # Simulate network latency
return {"data": "Fetched async data!"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)Uvicorn: The Async Engine
FastAPI, Uvicorn gibi bir ASGI sunucusuna dayanır. async def fonksiyonlarınızı verimli bir şekilde çalıştıran şey Uvicorn'dur.
- Farklı eşzamansız (asynchronous) görevlerin ne zaman çalışacağını düzenleyen Python olay döngüsünü (event loop) yönetir.
- Bir
awaitile karşılaşıldığında, Uvicorn hazır olan başka bir göreve geçiş yapabilir ve bu da API'nizi son derece eşzamanlı (concurrent) hale getirir.
Bu 'bağlam değiştirme' (context switching), FastAPI'nin her bir isteğin tamamen bitmesini beklemeden birçok isteği işlemesine olanak tanır.
Quick Check: Async Use
Yavaş bir harici API'den (G/Ç (I/O) bağımlı bir görev) veri alması gereken bir FastAPI uç noktası oluşturuyorsunuz. FastAPI uygulamanızın yanıt verebilir durumda kalmasını sağlamak için bu uç noktayı tanımlamanın en iyi yolu aşağıdakilerden hangisidir?
Recap: Async FastAPI
FastAPI'nin Python'ın asenkron özelliklerinden nasıl yararlandığını inceledik:
- I/O sınırlı işlemler gerçekleştiren endpoint fonksiyonları için
async defkullanın. - Bir
async defiçerisinde diğer asenkron fonksiyonları veya kütüphaneleri çağırırkenawaitkullanın. - Uvicorn ve olay döngüsü (event loop) tarafından desteklenen bu engelleyici olmayan yaklaşım, FastAPI uygulamanızın birçok eşzamanlı isteği verimli bir şekilde işlemesini sağlayarak oldukça hızlı yanıt veren API'ler oluşturmanıza olanak tanır.
Sırada, gerçekten uzun süren veya CPU sınırlı görevleri arka plan işlemlerine nasıl devredeceğimize bakacağız!
Sıkça Sorulan Sorular
“FastAPI ve Eşzamansız İşlemler” dersi ücretsiz mi?
Evet — “FastAPI ve Eşzamansız İşlemler” 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 FastAPI Backend Development Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.
“FastAPI ve Eşzamansız İşlemler” dersinde ne öğreneceğim?
FastAPI'nin eşzamansız işlevleri nasıl doğal biçimde işlediğini ve engelleme yapmayan verimli kodun nasıl yazılacağını öğrenin. FastAPI Backend Development Bootcamp 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.
FastAPI Backend Development Bootcamp öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te FastAPI Backend Development Bootcamp, 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 2. dersidir.
“FastAPI ve Eşzamansız İşlemler” 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 FastAPI Backend Development Bootcamp dersinde kod yazıp çalıştırabilir miyim?
Evet. Her FastAPI Backend Development Bootcamp 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
- Python'da Async/Await Tekrarı
- FastAPI ve Eşzamansız İşlemler
- Arka Plan Görevlerini Yürütme
- Gerçek Zamanlı İletişim için WebSockets