Arka Plan Görevlerini Yürütme
Uzun süren işlemleri arka plan görevlerine aktarmayı, API'nin engellenmesini önlemeyi ve kullanıcı deneyimini iyileştirmeyi öğrenin.
Arka Plan Görevlerini Yürütme, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 3. 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.
Slow Endpoints & UX
API'nizin bir kullanıcı isteğinden sonra e-posta göndermek veya büyük bir dosyayı işlemek gibi zaman alan bir işlem yapması gerektiğini hayal edin.
API'niz yanıt vermeden önce bu görevlerin bitmesini beklerse, kullanıcı yavaş ve yanıt vermeyen bir uygulama deneyimi yaşar. Buna bloklayan işlem (blocking operation) denir.
Kötü kullanıcı deneyimi genellikle kullanıcıların uygulamanızı terk etmesine yol açar!
Blocking vs. Non-Blocking APIs
Bunu yemek siparişi vermek gibi düşünebilirsiniz:
- Engelleyici (Blocking): Siparişi verirsiniz ve garson, bir sonraki siparişi almadan önce yemeğinizin pişmesini, servis edilmesini ve yenmesini bekler. (Korkunç bir hizmet!)
- Engelleyici Olmayan (Non-Blocking): Siparişi verirsiniz, garson siparişinizi mutfağa iletir ve hemen bir sonraki müşterinin siparişini alır. Yemeğiniz arka planda hazırlanır.
Sorunsuz bir kullanıcı deneyimi için API'lerimizin engelleyici olmamasını istiyoruz.
Meet FastAPI's BackgroundTasks
FastAPI, HTTP yanıtını istemciye gönderdikten sonra 'arka planda' işlemler yürütmek için basit bir yol sağlar. Bu, BackgroundTasks bağımlılığı kullanılarak gerçekleştirilir.
BackgroundTasks, ana API rotası tamamlandıktan ve yanıt iletildikten sonra yürütülecek işlevleri bir listeye eklemenize olanak tanır.
Injecting BackgroundTasks
Arka plan görevlerini kullanmak için, yol operasyon fonksiyonunuzda BackgroundTasks tipinde bir parametre tanımlamanız yeterlidir. FastAPI, bunun bir örneğini otomatik olarak enjekte edecektir.
fastapi'denBackgroundTasks'ı içe aktarın.- Örneğin,
background_tasks: BackgroundTasksşeklinde bir parametre tanımlayın. - Bir fonksiyonu zamanlamak için
background_tasks.add_task()kullanın.
First Background Task Demo
Temel bir örnek görelim. Bu görev, API yanıtı gönderildikten sonra bir mesaj yazdıracaktır. uvicorn main:app --reload komutunu çalıştırmayı unutmayın.
from fastapi import FastAPI, BackgroundTasks
import time
app = FastAPI()
def write_notification(email: str, message=""):
time.sleep(2) # Simulate a long operation
with open("log.txt", mode="a") as email_file:
email_file.write(f"notification for {email}: {message}\n")
print(f"Notification written for {email}")
@app.post("/send-notification/{email}")
async def send_notification(email: str, background_tasks: BackgroundTasks):
background_tasks.add_task(write_notification, email, message="Welcome to CoddyKit!")
return {"message": "Notification sent in background!"}
Understanding Execution Flow
Arka plan görevlerinin ne zaman çalıştığını anlamak çok önemlidir:
- Yol işlem fonksiyonu çalışır.
- HTTP yanıtı istemciye geri gönderilir.
- Daha sonra,
BackgroundTasks'a eklenen fonksiyonlar yürütülür.
Bu, istemcinin bu görevlerin tamamlanmasını beklemediği anlamına gelir ve bu da algılanan performansı artırır.
Passing Arguments to Tasks
Arka plan fonksiyonunuzun ihtiyaç duyduğu tüm argümanları add_task() fonksiyonuna iletebilirsiniz. İlk argüman fonksiyonun kendisidir, ardından ise fonksiyonun argümanları gelir.
Argümanlar, tıpkı normal bir Python fonksiyonunu çağırır gibi konumsal veya anahtar kelimeli argümanlar olabilir.
Örneğin: background_tasks.add_task(my_function, arg1, arg2=value).
Simulating Email Send
Arka plan görevleri için yaygın bir senaryo e-posta göndermektir. Bu işlem birkaç saniye sürebilir ve doğrudan API rotasında yapılması durumunda kullanıcınızı engelleyecektir.
Burada, birden fazla alıcıya e-posta göndermeyi simüle ediyoruz. /docs arayüzünden deneyin!
from fastapi import FastAPI, BackgroundTasks
import asyncio # For async sleep
app = FastAPI()
async def send_email_async(recipients: list, subject: str, body: str):
print(f"Starting email send to {recipients}...")
await asyncio.sleep(3) # Simulate network delay for sending email
print(f"Email '{subject}' sent to {recipients} with body: '{body}'")
@app.post("/send-marketing-email/")
async def marketing_campaign(
recipients: list[str],
subject: str,
body: str,
background_tasks: BackgroundTasks
):
# The actual email sending is offloaded
background_tasks.add_task(send_email_async, recipients, subject, body)
return {"message": "Marketing email campaign initiated in background!"}
Important Considerations
Güçlü olsalar da, BackgroundTasks her şey için uygun değildir:
- Kısa ömürlü: Nispeten hızlı tamamlanan (saniyelerden birkaç dakikaya kadar) görevler için en iyisidir.
- Kalıcılık yok: FastAPI süreciniz çökerse, zamanlanmış görevler kaybolur.
- Yeniden deneme yok: Başarısız görevler için yerleşik bir yeniden deneme mekanizmalarına sahip değildirler.
- Ağır hesaplamalar için değil: Çok uzun süren, CPU yoğunluklu veya hata toleransı gerektiren görevler için Celery, Redis Queue (RQ) veya benzeri özel görev kuyruklarını değerlendirin.
Background Task Check
BackgroundTasks kullanmayı öğrendiniz. FastAPI'nin BackgroundTasks özelliği hakkında aşağıdaki ifadelerden hangisi doğrudur?
Recap: Background Tasks
FastAPI'nin BackgroundTasks özelliğinin API'nizi nasıl hızlı tuttuğunu inceledik:
- HTTP yanıtı gönderildikten sonra çalışırlar.
- Bildirim gönderme gibi kritik olmayan, nispeten kısa süreli işlemler için harikadırlar.
- Bunları bir bağımlılık olarak tanımlayıp
add_task()ile kullanırsınız. - Çok uzun süren veya kritik görevler için harici görev kuyruklarını değerlendirin.
Arka plan görevlerini kullanarak, API kullanıcılarınız için daha sorunsuz bir deneyim sağlarsınız!
Sıkça Sorulan Sorular
“Arka Plan Görevlerini Yürütme” dersi ücretsiz mi?
Evet — “Arka Plan Görevlerini Yürütme” 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.
“Arka Plan Görevlerini Yürütme” dersinde ne öğreneceğim?
Uzun süren işlemleri arka plan görevlerine aktarmayı, API'nin engellenmesini önlemeyi ve kullanıcı deneyimini iyileştirmeyi öğ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 3. dersidir.
“Arka Plan Görevlerini Yürütme” 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