Python ve Celery ile Asenkron Tasklar

Python ve Celery ile Asenkron Görev Yönetimi

Modern web uygulamalarında performans kritik bir öneme sahiptir. Kullanıcılarınızı bekletmemek için uzun süren işlemleri arka planda çalıştırmanız gerekir. İşte tam bu noktada Python Celery devreye giriyor. Bu yazıda, Celery’nin basit şelilde kullanımını ve pratik bir kaç örnek inceleyeceğiz.

Celery Nedir ve Neden İhtiyaç Duyarız?

Celery, distributed task queue sistemidir. Şöyle düşünün: Bir restoranda siparişleri alan garson ve mutfakta yemekleri hazırlayan aşçılar var. Garson (web uygulamanız) siparişleri alır ve mutfağa (Celery workers) iletir. Aşçılar siparişleri hazırlarken (arka plan görevleri), garson diğer müşterilerle ilgilenmeye devam edebilir.

Temel Bileşenler:

  • Broker (Mesaj Aracısı): Redis veya RabbitMQ gibi bir mesaj kuyruğu sistemi
  • Worker (İşçi): Görevleri işleyen Python süreçleri
  • Beat (Zamanlayıcı): Periyodik görevleri yöneten bileşen
  • Result Response: Dönen sonuç diyebiliriz.
Python ve Celery ile Asenkron Taskları Basitçe Yönetmek

Kurulum

pip install celery

Küçük bir örnek

from celery import Celery

app = Celery('tasks',
broker='redis://localhost:6379/0',
backend='redis://localhost:6379/0')

@app.task
def send_mail(receiver, subject, message):
try:
return "Mail send with success."
except Exception as e:
return f"There is an error: {str(e)}"

send_mail.delay("example@mail.com", "Hello", "Test message")

Pratik Kullanım Örnekleri

  • Resim İşlemleri

@app.task
def resize_image(path):
try:
with Image.open(path) as img:
img.thumbnail((800, 600))
img.save(f"thumb_{path}")
return "Image resized."
except Exception as e:
return f"Error: {str(e)}"

  • Rapor Oluşturma

@app.task
def create_report(first_date, last_date):

datas = get_data(first_date, last_date)

report = make_excel(datas)

return "Report is ready"

  • Schedule ayarları

app.conf.beat_schedule = {
'daily_report': {
'task': 'tasks.create_report',
'schedule': crontab(hour=7, minute=30),
}
}

Monitor etmek için

celery -A tasks flower

# run worker
celery -A tasks worker --loglevel=info

# for schedule
celery -A tasks beat

Ekstra olarak

  1. Taskları küçük hallere bölebilirsiniz.
  2. Eğer bir taskın bitmesi uzun sürüyorsa progressleri görecek şekilde notificationlar eklenebilir.
  3. Ne olur ne olmaz yedek alınabilir. Sıkıntılı bir durumda rollback atabilirsiniz.
  4. Log kontrolü olması debug ederken veya akışta bir problem varsa fark etmek için çok yararlı olur.

Özet

Celery, Python uygulamalarınızda asenkron şekilde taskları yönetmek için pratik bir araçtır. Temel kullanımı oldukça basit olmakla birlikte, ihtiyaca göre karmaşık senaryolarda da kullanılabilir.

Gönderiyi paylaş:

İlgili Yazılar