जब आप पहली बार आयात किया जा रहा है तो आप WSGI स्क्रिप्ट से पृष्ठभूमि थ्रेड बना सकते हैं।
import threading
import time
def do_stuff():
time.sleep(60)
... do periodic job
_thread = threading.Thread(target=do_stuff)
_thread.setDaemon(True)
_thread.start()
इसके लिए काम करने के लिए, हालांकि आप केवल एक डेमॉन प्रक्रिया का उपयोग करने की अन्यथा प्रत्येक प्रक्रिया एक ही बात है जो शायद आप नहीं चाहते कर रहे होते होगा।
यदि आप डेमॉन प्रक्रिया समूह में एकाधिक प्रक्रिया का उपयोग कर रहे हैं, तो एक विकल्प विशेष डेमॉन प्रक्रिया समूह बनाना है जिसका एकमात्र उद्देश्य इस पृष्ठभूमि धागे को चलाने का है। दूसरे शब्दों में, प्रक्रिया वास्तव में कोई अनुरोध प्राप्त नहीं करता है।
आप होने से ऐसा कर सकते हैं:
WSGIDaemonProcess django-jobs processes=1 threads=1
WSGIImportScript /usr/local/django/mysite/apache/django.wsgi \
process-group=django-jobs application-group=%{GLOBAL}
WSGIImportScript निर्देश है कि स्क्रिप्ट लोड और प्रक्रिया समूह 'Django-जॉब' के संदर्भ में स्टार्टअप पर इसे चलाने के लिए कहते हैं।
एकाधिक स्क्रिप्ट्स को सहेजने के लिए, मैंने यह इंगित किया है कि आपकी मूल WSGI स्क्रिप्ट फ़ाइल क्या होगी जिसे आपने WSGIScriptAlias के लिए उपयोग किया था। हम इसे जब यह कि हालांकि निर्देश से भरी हुई है चलाने के लिए नहीं करना चाहते हैं, तो हम कार्य करें:
import mod_wsgi
if mod_wsgi.process_group == 'django-jobs':
_thread = threading.Thread(target=do_stuff)
_thread.setDaemon(True)
_thread.start()
यहाँ
यह डेमॉन प्रक्रिया समूह का नाम पर लग रहा है और केवल जब विशेष डेमॉन प्रक्रिया के भीतर शुरू चलाता है इस के लिए एकल प्रक्रिया के साथ समूह स्थापित।
कुल मिलाकर आप अपाचे को एक बड़े गौरवशाली प्रक्रिया प्रबंधक के रूप में उपयोग कर रहे हैं, यद्यपि जो पहले से ही मजबूत होने के लिए जाना जाता है। यह बहुत अधिक है क्योंकि यह प्रक्रिया उन लोगों के शीर्ष पर अतिरिक्त मेमोरी का उपभोग करेगी जो अनुरोध स्वीकार करते हैं और हैंडलिंग करते हैं, लेकिन आप जो भी कर रहे हैं उसकी जटिलता के आधार पर यह अभी भी उपयोगी हो सकता है।
ऐसा करने का एक प्यारा पहलू यह है कि चूंकि यह अभी भी एक पूर्ण Django अनुप्रयोग है, इसलिए आप इस प्रक्रिया के लिए विशिष्ट यूआरएल मैप कर सकते हैं और इसलिए पृष्ठभूमि कार्य को प्रबंधित या निगरानी करने के लिए एक दूरस्थ एपीआई प्रदान करते हैं और यह क्या कर रहा है ।
WSGIDaemonProcess django-jobs processes=1 threads=1
WSGIImportScript /usr/local/django/mysite/apache/django.wsgi \
process-group=django-jobs application-group=%{GLOBAL}
WSGIDaemonProcess django-site processes=4 threads=5
WSGIScriptAlias//usr/local/django/mysite/apache/django.wsgi
WSGIProcessGroup django-site
WSGIApplicationGroup %{GLOBAL}
<Location /admin>
WSGIProcessGroup django-jobs
</Location>
यहाँ, 'Django-जॉब' में 'Django साइट' में/व्यवस्थापक रन के तहत सामान,/व्यवस्थापक के साथ के लिए छोड़कर सभी URL।
वैसे भी, यह अपाचे mod_wsgi डिमन प्रक्रिया के भीतर अनुरोध करने के विशिष्ट प्रश्न को संबोधित करता है।
जैसा कि बताया गया है, विकल्प एक कमांड लाइन स्क्रिप्ट है जो Django को सेट और लोड करता है और काम करता है और क्रॉन नौकरी से निष्पादित करता है।एक कमांड लाइन स्क्रिप्ट का अर्थ कभी-कभी क्षणिक स्मृति उपयोग होता है, लेकिन नौकरी के लिए स्टार्टअप लागत हर बार लोड करने की आवश्यकता के रूप में अधिक होती है।
मैं सेलेरी के साथ गया। एक जादू की तरह काम किया। –
एक क्रॉन कार्य लगातार पृष्ठभूमि में नहीं चलता है, लेकिन तैयार समय पर शुरू होता है और समाप्त होता है। चूंकि डीजेंगो-कमांड शुरू करने के लिए 1.5 सेकंड्स (मॉडलों की जटिलता को छोड़कर) लेते हैं, इसलिए उच्च प्रदर्शन की आवश्यकता होने पर आमतौर पर ऐसा करने का तरीका नहीं होता है। – FeedTheWeb
क्या यह अभी भी वैध है? यदि हां, तो सेलेरी कार्य को खत्म करने का एक अच्छा तरीका क्या होगा जो मेरी लंबी प्रसंस्करण करेगा? –