Django
Async कार्य (अजवाइन)
खोज…
टिप्पणियों
अजवाइन एक कार्य कतार है जो पृष्ठभूमि या अनुसूचित नौकरियों को चला सकती है और Django के साथ बहुत अच्छी तरह से एकीकृत करती है। अजवाइन को संदेश दलाल के रूप में जाना जाता है जो श्रमिकों को आह्वान से संदेश पारित करने के लिए आवश्यक है। यह संदेश ब्रोकर रेडिस, रब्बिटम या यहां तक कि Django ORM / db हो सकता है, हालांकि यह अनुशंसित दृष्टिकोण नहीं है।
उदाहरण के साथ आरंभ करने से पहले, आपको अजवाइन को कॉन्फ़िगर करना होगा। कॉन्फ़िगर अजवाइन करने के लिए, एक बनाने celery_config.py
, मुख्य अनुप्रयोग में फ़ाइल के समानांतर settings.py
फ़ाइल।
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# broker url
BROKER_URL = 'redis://localhost:6379/0'
# Indicate Celery to use the default Django settings module
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
app = Celery('config')
app.config_from_object('django.conf:settings')
# if you do not need to keep track of results, this can be turned off
app.conf.update(
CELERY_RESULT_BACKEND=BROKER_URL,
)
# This line will tell Celery to autodiscover all your tasks.py that are in your app folders
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
और मुख्य ऐप की __init__.py
फ़ाइल अजवाइन ऐप आयात करें। इस तरह
# -*- coding: utf-8 -*-
# Not required for Python 3.
from __future__ import absolute_import
from .celery_config import app as celery_app # noqa
अजवाइन के कार्यकर्ता को चलाने के लिए, इस कमांड का उपयोग उस स्तर पर करें, जहां मैनेजमेन्ट है।
# pros is your django project,
celery -A proj worker -l info
2 नंबर जोड़ने के लिए सरल उदाहरण
आरंभ करना:
- अजवाइन
pip install celery
करें अजवाइनpip install celery
करें - अजवाइन कॉन्फ़िगर करें (टिप्पणी अनुभाग के प्रमुख)
from __future__ import absolute_import, unicode_literals
from celery.decorators import task
@task
def add_number(x, y):
return x + y
आप .delay()
पद्धति का उपयोग करके इसे एसिंक्रोनस रूप से चला सकते हैं।
add_number.delay(5, 10)
, जहां 5 और 10 फ़ंक्शन add_number
लिए तर्क हैं
यह जाँचने के लिए कि क्या async फ़ंक्शन ने कार्य पूरा कर लिया है, आप delay
विधि द्वारा लौटाए गए async ऑब्जेक्ट पर .ready()
फ़ंक्शन का उपयोग कर सकते हैं।
अभिकलन के परिणाम प्राप्त करने के लिए, आप। .result
ऑब्जेक्ट पर .result
विशेषता का उपयोग कर सकते हैं।
उदाहरण
async_result_object = add_number.delay(5, 10)
if async_result_object.ready():
print(async_result_object.result)