Django                
            Zadania asynchroniczne (seler)
        
        
            
    Szukaj…
Uwagi
Seler jest kolejką zadań, która może uruchamiać zadania w tle lub zaplanowane i całkiem dobrze integruje się z Django. Seler wymaga czegoś znanego jako broker wiadomości, aby przekazywać wiadomości z wywołania pracownikom. Ten broker komunikatów może być redis, rabbitmq, a nawet Django ORM / db, chociaż nie jest to zalecane podejście.
 Zanim zaczniesz z przykładem, musisz skonfigurować seler. Aby skonfigurować seler, utwórz plik celery_config.py w głównej aplikacji, równolegle do pliku 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)
 A w pliku __init__.py głównej aplikacji zaimportuj aplikację selera. lubię to 
# -*- coding: utf-8 -*- 
# Not required for Python 3. 
from __future__ import absolute_import
from .celery_config import app as celery_app  # noqa
Aby uruchomić selera, użyj tego polecenia na poziomie, na którym znajduje się manage.py.
# pros is your django project, 
celery -A proj worker -l info
Prosty przykład dodania 2 liczb
Rozpocząć:
-  Zainstaluj seler pip install celery
- skonfiguruj seler (przejdź do sekcji uwag)
from __future__ import absolute_import, unicode_literals
from celery.decorators import task
@task
def add_number(x, y):
    return x + y
 Możesz uruchomić to asynchronicznie, używając metody .delay() . 
 add_number.delay(5, 10) , gdzie 5 i 10 są argumentami funkcji add_number 
 Aby sprawdzić, czy funkcja asynchroniczna zakończyła operację, możesz użyć funkcji .ready() na obiekcie asynchronicznym zwróconym przez metodę delay . 
 Aby pobrać wynik obliczeń, możesz użyć atrybutu .result dla obiektu asynchronicznego. 
Przykład
async_result_object = add_number.delay(5, 10)
if async_result_object.ready():
    print(async_result_object.result)