WSGI ile ASGI arasındaki fark nedir? Gunicorn, Uvicorn ve FastAPI/Django bu yapıda nereye oturur?

Cevap

WSGI (PEP 3333) ve ASGI, Python web uygulamaları ile web sunucuları arasındaki standart arayüzlerdir. WSGI senkron, ASGI asenkron bir arayüzdür.

WSGIASGI
Modelİstek başına senkron çağrıasync coroutine, event loop
ProtokollerYalnızca HTTP istek/yanıtHTTP, WebSocket, HTTP/2, lifespan olayları
EşzamanlılıkProcess/thread sayısı kadarTek process'te binlerce bekleyen bağlantı
Framework örnekleriFlask, Django (klasik)FastAPI, Starlette, Django (3.0+ ASGI desteği)
Sunucu örnekleriGunicorn, uWSGIUvicorn, Hypercorn, Daphne, Granian
# WSGI uygulaması
def app(environ, start_response):
    start_response("200 OK", [("Content-Type", "text/plain")])
    return [b"merhaba"]

# ASGI uygulaması
async def app(scope, receive, send):
    await send({"type": "http.response.start", "status": 200,
                "headers": [(b"content-type", b"text/plain")]})
    await send({"type": "http.response.body", "body": b"merhaba"})

Production'da tipik kurulum

# FastAPI: Uvicorn worker'ları
uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4

# Django (WSGI)
gunicorn myproject.wsgi:application --workers 4 --threads 2

Önlerinde genelde Nginx veya bir load balancer TLS sonlandırma ve statik dosya için durur. Kubernetes'te çoğu zaman pod başına tek process çalıştırıp ölçeklemeyi replica sayısıyla yapmak tercih edilir.

Dikkat

ASGI'ye geçmek otomatik hız kazandırmaz. async def endpoint içinde senkron bir DB sürücüsü veya requests kullanırsanız event loop'u bloklarsınız ve tüm istekler bekler. Ya async kütüphaneler (asyncpg, httpx) kullanın ya da FastAPI'de endpoint'i normal def olarak tanımlayın; FastAPI onu thread pool'da çalıştırır.

  1. list ve tuple arasındaki fark nedir?KolayPythonBackend
  2. Varsayılan argüman olarak liste vermek neden tehlikelidir?OrtaPythonBackend
  3. Decorator nedir? Basit bir zamanlama decorator'ı yazın.OrtaPythonBackend
  4. Generator nedir, yield ne yapar?OrtaPythonBackend
  5. GIL nedir ve çoklu iş parçacığını nasıl etkiler?ZorPythonBackend
  6. async/await ve asyncio nasıl çalışır? Ne zaman thread veya process yerine tercih edilir?ZorPythonBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle