2017-05-11 12 views
6

यदि मैं सेलरी चल रहा है, तो task.py में परिवर्तन करता हूं, क्या कोई तंत्र है जिसके द्वारा यह अद्यतन कोड को फिर से लोड कर सकता है? या क्या मुझे सेलेरी को फिर से लोड करने के लिए बंद करना है?डीजेगो और सेलेरी - परिवर्तन के बाद सेलेरी में कोड को फिर से लोड करना

मैंने पढ़ा है अजवाइन पुराने संस्करणों में एक --autoreload बहस हुई थी, लेकिन मैं इसे वर्तमान संस्करण में नहीं मिल सकता है:

celery: error: unrecognized arguments: --autoreload

उत्तर

9

दुर्भाग्यवश --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 परिवर्तन चला सकते हैं।

यह केवल विकास उद्देश्यों के लिए है और इसे उत्पादन में उपयोग नहीं करते हैं।

1

आप माता-पिता वर्कर प्रोसेस पर SIGHUP की कोशिश कर सकते हैं, यह कार्यकर्ता पुन: प्रारंभ होता , लेकिन मुझे यकीन नहीं है कि यह नए कार्यों को उठाता है या नहीं। एक शॉट के लायक, सोचा :)

संबंधित मुद्दे