दुर्भाग्यवश --autoreload
काम नहीं करता है और यह deprecated है।
आप वॉचडॉग का उपयोग कर सकते हैं जो वॉचमेडो को फ़ाइल ईवेंट के आधार पर क्रियाओं को करने के लिए एक खोल उपयोगिता प्रदान करता है।
pip install watchdog
आप
watchmedo auto-restart -- celery worker -l info -A foo
साथ कार्यकर्ता शुरू कर सकते हैं डिफ़ॉल्ट यह मौजूदा निर्देशिका में सभी फ़ाइलों के लिए घड़ी जाएगा। इन्हें संबंधित पैरामीटर पास करके बदला जा सकता है।
watchmedo auto-restart -d . -p '*.py' -- celery worker -l info -A foo
आप Django का उपयोग कर रहे हैं और निगरानी पर निर्भर नहीं करना चाहते हैं, तो इस लक्ष्य को हासिल करने के लिए एक सरल चाल है। Django में ऑटोरेलोड यूटिलिटी है जिसका उपयोग रनरवर द्वारा कोड बदलते समय WSGI सर्वर को पुनरारंभ करने के लिए किया जाता है।
उसी कार्यक्षमता का उपयोग सेलेरी श्रमिकों को फिर से लोड करने के लिए किया जा सकता है। अजवाइन नामक एक अलग प्रबंधन कमांड बनाएँ। मौजूदा कार्यकर्ता को मारने और एक नया कार्यकर्ता शुरू करने के लिए एक समारोह लिखें। अब इस फ़ंक्शन को ऑटोरेलोड पर हुक करें।
import shlex
import subprocess
from django.core.management.base import BaseCommand
from django.utils import autoreload
def restart_celery():
cmd = 'pkill celery'
subprocess.call(shlex.split(cmd))
cmd = 'celery worker -l info -A foo'
subprocess.call(shlex.split(cmd))
class Command(BaseCommand):
def handle(self, *args, **options):
print('Starting celery worker with autoreload...')
autoreload.main(restart_celery)
अब आप python manage.py celery
साथ अजवाइन कार्यकर्ता जो autoreload होगा जब codebase परिवर्तन चला सकते हैं।
यह केवल विकास उद्देश्यों के लिए है और इसे उत्पादन में उपयोग नहीं करते हैं।