Celery ile Django'da Asenkron Çoklu İş Parçacıklı Görevlerin Zamanlanması

Bir web uygulamasında görevleri yönetmek, özellikle zaman alıcı işlemleri eşzamansız olarak gerçekleştirmeniz gerektiğinde karmaşık hale gelebilir. Popüler bir web çerçevesi olan Django, eşzamansız görevleri verimli bir şekilde işlemek için Celery ile genişletilebilir. Bu blog yazısında, bir Django uygulamasında Celery ile periyodik görev zamanlamasının nasıl ayarlanacağını inceleyeceğiz. Bu, uygulamanızın belirli aralıklarla arka plan görevleri çalıştırmasını ve görev işlemeyi ana uygulama iş parçacıklarından boşaltmasını sağlar.
1. Celery ve Django Celery Beat'i yükleyin
Yolculuk Celery ve django-celery-beat'i kurmakla başlar. Bunlar Django'da görev zamanlaması ve yürütme için temel bileşenlerdir. Bunları pip kullanarak kurabilirsiniz:
pip install celery django-celery-beat
2. Celery'i yapılandırın
Celery'i yükledikten sonra, Django uygulamanızla çalışacak şekilde yapılandırmanız gerekir. Adlı bir dosya oluşturarak başlayın. celery.py projenizin ana dizininde. Bu dosya Celery'i başlatacak ve onu Django'nun ayarlarına bağlayacaktır.
from celery import Celery import os # Set the default Django settings module for the 'celery' program. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings') app = Celery('your_project_name') # Using a string here means the worker will not have to serialize # the configuration object to child processes. app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django apps. app.autodiscover_tasks()
Django başlatıldığında bu yapılandırmanın yüklendiğinden emin olmak için Celery uygulamanızı içe aktarın your_project_name/__init__.py dosya:
from .celery import app as celery_app __all__ = ('celery_app',)
3. Django Ayarlarını Güncelleyin
Daha sonra Celery'i Django ayarlarınızla entegre etmek için güncelleme yapın. settings.py Dosya. Bu, brokerinizi ve RabbitMQ veya Redis olabilecek sonuç arka ucunu belirtmeyi içerir.
CELERY_BROKER_URL = 'redis://localhost:6379/0' # or 'amqp://localhost//' for RabbitMQ CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' CELERY_TIMEZONE = 'UTC' from celery.schedules import crontab CELERY_BEAT_SCHEDULE = { 'task-name': { 'task': 'myapp.tasks.task_function', 'schedule': crontab(minute=0, hour=0), # Executes daily at midnight }, }
4. Görevinizi Tanımlayın
Şimdi, görevlerinizin ne olması gerektiğini tanımlamanın zamanı geldi. Bir tasks.py Django uygulamanızdaki dosya (örneğin, myapp ) ve görev fonksiyonunuzu ekleyin.
from celery import shared_task @shared_task def task_function(): # Logic for your asynchronous, multithreaded task print("Task is executing")
Burada, @paylaşılan_görev Celery tarafından sağlanan ve fonksiyonun çağrılabilir bir görev olmasını sağlayan bir dekoratördür.
5. Celery Worker'ı çalıştırın ve dövün
Son olarak Celery işçisini çalıştırmanız ve görevleri işlemeye ve bunları yapılandırmanıza göre zamanlamaya başlamanız gerekir.
# Start Celery Worker celery -A your_project_name worker -l info # Start Celery Beat celery -A your_project_name beat -l info
Bu komutlar, asenkron görevleri işlemek için işçiyi ve periyodik görevleri yönetmek için beat işlemini başlatır. Bu komutları yürütmeden önce Redis veya RabbitMQ gibi mesaj aracınızın çalıştığından emin olun.
Bu adımları izleyerek, Django uygulamanızı periyodik asenkron görevleri verimli bir şekilde işleyecek şekilde donatmış olursunuz ve uygulamanızın performansını ve yanıt verme yeteneğini artırırsınız. Celery güçlü bir araçtır ve bu kurulumla daha karmaşık görev işleme fikirlerini keşfetmeye hazırsınız.
Yeniden Paylaşım Feragatnamesi: Bu içerik telif hakkına sahiptir ve tüm hakları yazar tarafından saklıdır. Bu sayfayı yeniden paylaşabilir veya paylaşabilirsiniz, ancak lütfen orijinal kaynağa net bir atıf yaparak bu sayfaya geri bağlantı sağladığınızdan emin olun. İçeriğimize saygı gösterdiğiniz için teşekkür ederiz!
Bu makale yardımcı oldu mu?
196 kişiden 196'i bunu faydalı buldu
John Tanner
Kurucu20 yılı aşkın süredir çapraz platform full-stack geliştirme alanında deneyime sahip, son derece yetenekli bir yazılım geliştiriciyim. Büyük ölçekli proje mimarilerini tasarlama ve yönetme ile karmaşık sistemleri basitleştirme konusunda uzmanım. Uzmanlık alanlarım arasında Python, Rust ve Django geliştirme yer almaktadır. Blockchain teknolojileri, yapay zeka, yüksek eşzamanlılık sistemleri, uygulama ve web veri kazıma, API geliştirme, veritabanı optimizasyonu, projelerin konteynerleştirilmesi ve üretim ortamlarına dağıtma konularında derin bir yetkinliğe sahibim.
İletişim John Tannerİlgili gönderi:
- Dış Ticaret için Başarılı Bir Yurtdışı Bağımsız Web Sitesi Nasıl Kurulur: Pazar Araştırmasından SEO Optimizasyonuna Kapsamlı Bir Rehber
- Django ile Yapay Zeka Destekli Uygulamalar Geliştirme
- Django'nun Gücünü Ortaya Çıkarmak: Nihai Backend Çatısı
- Django ile Çok Dilli Bir Web Sitesi Oluşturma: En İyi Uygulamalar ve SEO Stratejileri
- Django Geliştirme Hizmetleri