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

Django
|
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
avatar
John Tanner
Kurucu

20 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