fastapi/docs/tr/docs/tutorial/background-tasks.md

5.2 KiB
Raw Blame History

Arka Plan Görevleri

Response döndürüldükten sonra çalıştırılacak arka plan görevleri tanımlayabilirsiniz.

Bu, requestten sonra yapılması gereken; ancak clientın responseu almadan önce tamamlanmasını beklemesine gerek olmayan işlemler için kullanışlıdır.

Örneğin:

  • Bir işlem gerçekleştirdikten sonra gönderilen email bildirimleri:
    • Bir email servera bağlanmak ve email göndermek genellikle "yavaş" olduğundan (birkaç saniye), responseu hemen döndürüp email bildirimini arka planda gönderebilirsiniz.
  • Veri işleme:
    • Örneğin, yavaş bir süreçten geçmesi gereken bir dosya aldığınızı düşünün; "Accepted" (HTTP 202) responseu döndürüp dosyayı arka planda işleyebilirsiniz.

BackgroundTasks Kullanımı

Önce BackgroundTasksi import edin ve path operation functionınızda BackgroundTasks tip bildirimi olan bir parametre tanımlayın:

{* ../../docs_src/background_tasks/tutorial001_py39.py hl[1,13] *}

FastAPI, sizin için BackgroundTasks tipinde bir obje oluşturur ve onu ilgili parametre olarak geçirir.

Bir Görev Fonksiyonu Oluşturun

Arka plan görevi olarak çalıştırılacak bir fonksiyon oluşturun.

Bu, parametre alabilen standart bir fonksiyondur.

async def de olabilir, normal def de olabilir; FastAPI bunu doğru şekilde nasıl ele alacağını bilir.

Bu örnekte görev fonksiyonu bir dosyaya yazacaktır (email göndermeyi simüle ediyor).

Ve yazma işlemi async ve await kullanmadığı için fonksiyonu normal def ile tanımlarız:

{* ../../docs_src/background_tasks/tutorial001_py39.py hl[6:9] *}

Arka Plan Görevini Ekleyin

Path operation functionınızın içinde, görev fonksiyonunuzu .add_task() metodu ile background tasks objesine ekleyin:

{* ../../docs_src/background_tasks/tutorial001_py39.py hl[14] *}

.add_task() şu argümanları alır:

  • Arka planda çalıştırılacak bir görev fonksiyonu (write_notification).
  • Görev fonksiyonuna sırayla geçirilecek argümanlar (email).
  • Görev fonksiyonuna geçirilecek keyword argümanlar (message="some notification").

Dependency Injection

BackgroundTasks kullanımı dependency injection sistemiyle de çalışır; BackgroundTasks tipinde bir parametreyi birden fazla seviyede tanımlayabilirsiniz: bir path operation function içinde, bir dependencyde (dependable), bir sub-dependencyde, vb.

FastAPI her durumda ne yapılacağını ve aynı objenin nasıl yeniden kullanılacağını bilir; böylece tüm arka plan görevleri birleştirilir ve sonrasında arka planda çalıştırılır:

{* ../../docs_src/background_tasks/tutorial002_an_py310.py hl[13,15,22,25] *}

Bu örnekte, response gönderildikten sonra mesajlar log.txt dosyasına yazılacaktır.

Requestte bir query varsa, loga bir arka plan göreviyle yazılır.

Ardından path operation function içinde oluşturulan başka bir arka plan görevi, email path parametresini kullanarak bir mesaj yazar.

Teknik Detaylar

BackgroundTasks sınıfı doğrudan starlette.backgrounddan gelir.

fastapi üzerinden import edebilmeniz ve yanlışlıkla starlette.background içindeki alternatif BackgroundTaski (sonunda s olmadan) import etmemeniz için FastAPInin içine doğrudan import/eklenmiştir.

Sadece BackgroundTasks (ve BackgroundTask değil) kullanarak, bunu bir path operation function parametresi olarak kullanmak ve gerisini FastAPInin sizin için halletmesini sağlamak mümkündür; tıpkı Request objesini doğrudan kullanırken olduğu gibi.

FastAPIde BackgroundTaski tek başına kullanmak hâlâ mümkündür; ancak bu durumda objeyi kendi kodunuzda oluşturmanız ve onu içeren bir Starlette Response döndürmeniz gerekir.

Daha fazla detayı Starlettein Background Tasks için resmi dokümantasyonunda görebilirsiniz.

Dikkat Edilmesi Gerekenler

Yoğun arka plan hesaplamaları yapmanız gerekiyorsa ve bunun aynı process tarafından çalıştırılmasına şart yoksa (örneğin memory, değişkenler vb. paylaşmanız gerekmiyorsa), Celery gibi daha büyük araçları kullanmak size fayda sağlayabilir.

Bunlar genellikle daha karmaşık konfigurasyonlar ve RabbitMQ veya Redis gibi bir mesaj/iş kuyruğu yöneticisi gerektirir; ancak arka plan görevlerini birden fazla processte ve özellikle birden fazla serverda çalıştırmanıza olanak tanırlar.

Ancak aynı FastAPI appi içindeki değişkenlere ve objelere erişmeniz gerekiyorsa veya küçük arka plan görevleri (email bildirimi göndermek gibi) yapacaksanız, doğrudan BackgroundTasks kullanabilirsiniz.

Özet

Arka plan görevleri eklemek için path operation functionlarda ve dependencylerde parametre olarak BackgroundTasksi import edip kullanın.