Django
सुपरवाइजर के साथ चल रहा सेलेरी
खोज…
अजवाइन विन्यास
अजवायन
स्थापना -
pip install django-celery
जोड़ना
बुनियादी परियोजना संरचना।
- src/ - bin/celery_worker_start # will be explained later on - logs/celery_worker.log - stack/__init __.py - stack/celery.py - stack/settings.py - stack/urls.py - manage.py
अपने
stack/stack/
फ़ोल्डर मेंcelery.py
फ़ाइल जोड़ें।from __future__ import absolute_import import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'stack.settings') from django.conf import settings # noqa app = Celery('stack') app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
अपने
stack/stack/__init__.py
निम्नलिखित कोड जोड़ें:from __future__ import absolute_import from .celery import app as celery_app # noqa
एक कार्य बनाएँ और इसे उदाहरण के लिए
@shared_task()
रूप में चिह्नित करें@shared_task() def add(x, y): print("x*y={}".format(x*y))
चल रहे अजवाइन कार्यकर्ता "हाथ से":
celery -A stack worker -l info
अगर आप भी जोड़ना चाहते हैं
चल रहा है पर्यवेक्षक
अजवाइन कार्यकर्ता शुरू करने के लिए एक स्क्रिप्ट बनाएँ। अपने ऐप के भीतर अपनी स्क्रिप्ट डालें। उदाहरण के लिए:
stack/bin/celery_worker_start
#!/bin/bash NAME="StackOverflow Project - celery_worker_start" PROJECT_DIR=/home/stackoverflow/apps/proj/proj/ ENV_DIR=/home/stackoverflow/apps/proj/env/ echo "Starting $NAME as `whoami`" # Activate the virtual environment cd "${PROJECT_DIR}" if [ -d "${ENV_DIR}" ] then . "${ENV_DIR}bin/activate" fi celery -A stack --loglevel='INFO'
अपने नए बनाए गए स्क्रिप्ट में निष्पादन अधिकार जोड़ें:
chmod u+x bin/celery_worker_start
पर्यवेक्षक स्थापित करें (यदि पर्यवेक्षक पहले से स्थापित है तो इस परीक्षा को छोड़ दें)
apt-get install supervisor
अजवाइन शुरू करने के लिए अपने पर्यवेक्षक के लिए कॉन्फ़िगर फ़ाइल जोड़ें। इसे
/etc/supervisor/conf.d/stack_supervisor.conf
में/etc/supervisor/conf.d/stack_supervisor.conf
[program:stack-celery-worker] command = /home/stackoverflow/apps/stack/src/bin/celery_worker_start user = polsha stdout_logfile = /home/stackoverflow/apps/stack/src/logs/celery_worker.log redirect_stderr = true environment = LANG = en_US.UTF-8,LC_ALL = en_US.UTF-8 numprocs = 1 autostart = true autorestart = true startsecs = 10 stopwaitsecs = 600 priority = 998
फिर से पढ़ना और पर्यवेक्षक को अद्यतन करना
sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
मूल आज्ञा
sudo supervisorctl status stack-celery-worker stack-celery-worker RUNNING pid 18020, uptime 0:00:50 sudo supervisorctl stop stack-celery-worker stack-celery-worker: stopped sudo supervisorctl start stack-celery-worker stack-celery-worker: started sudo supervisorctl restart stack-celery-worker stack-celery-worker: stopped stack-celery-worker: started
सुपरवाइजर के साथ अजवाइन + रैबिटमक्यू
संदेश-पासिंग को संभालने के लिए अजवाइन की आवश्यकता होती है। हम RabbitMQ का उपयोग करते हैं क्योंकि यह सेटअप करना आसान है और यह अच्छी तरह से समर्थित है।
निम्नलिखित कमांड का उपयोग करके खरगोशबिट स्थापित करें
sudo apt-get install rabbitmq-server
इंस्टॉलेशन पूरा होने के बाद, उपयोगकर्ता बनाएं, एक वर्चुअल होस्ट जोड़ें और अनुमतियाँ सेट करें।
sudo rabbitmqctl add_user myuser mypassword
sudo rabbitmqctl add_vhost myvhost
sudo rabbitmqctl set_user_tags myuser mytag
sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"
सर्वर शुरू करने के लिए:
sudo rabbitmq-server
हम अजवाइन को पाइप से स्थापित कर सकते हैं:
pip install celery
आपकी Django सेटिंग में, आपका ब्रोकर URL तब कुछ ऐसा दिखेगा
BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'
अब अजवाइन कार्यकर्ता शुरू करें
celery -A your_app worker -l info
यह कमांड आपके django ऐप में परिभाषित किसी भी कार्य को चलाने के लिए एक Celery कार्यकर्ता को शुरू करता है।
पर्यवेक्षक एक पायथन प्रोग्राम है जो आपको किसी भी यूनिक्स प्रक्रिया को नियंत्रित और चालू रखने की अनुमति देता है। यह दुर्घटनाग्रस्त प्रक्रियाओं को भी फिर से शुरू कर सकता है। हम यह सुनिश्चित करने के लिए उपयोग करते हैं कि सेलेरी के कार्यकर्ता हमेशा चल रहे हैं।
सबसे पहले, पर्यवेक्षक स्थापित करें
sudo apt-get install supervisor
अपने पर्यवेक्षक conf.d (/etc/supervisor/conf.d/your_proj.conf) में अपनी_प्रो .conf फ़ाइल बनाएँ:
[program:your_proj_celery]
command=/home/your_user/your_proj/.venv/bin/celery --app=your_proj.celery:app worker -l info
directory=/home/your_user/your_proj
numprocs=1
stdout_logfile=/home/your_user/your_proj/logs/celery-worker.log
stderr_logfile=/home/your_user/your_proj/logs/low-worker.log
autostart=true
autorestart=true
startsecs=10
एक बार जब हमारी कॉन्फ़िगरेशन फ़ाइल बन जाती है और बच जाती है, तो हम पर्यवेक्षक कमांड के माध्यम से अपने नए कार्यक्रम के पर्यवेक्षक को सूचित कर सकते हैं। सबसे पहले हम सुपरवाइजर को /etc/supervisor/conf.dll में किसी भी नए या परिवर्तित प्रोग्राम कॉन्फ़िगरेशन को देखने के लिए कहते हैं:
sudo supervisorctl reread
इसके साथ किसी भी परिवर्तन को लागू करने के लिए कहकर अनुसरण किया गया:
sudo supervisorctl update
एक बार जब हमारे कार्यक्रम चल रहे हैं, तो निस्संदेह एक समय होगा जब हम अपनी स्थिति को रोकना, फिर से शुरू करना या देखना चाहेंगे।
sudo supervisorctl status
अपने अजवाइन उदाहरण को पुनः आरंभ करने के लिए:
sudo supervisorctl restart your_proj_celery