Suche…


Bemerkungen

Sellerie ist eine Task-Warteschlange, die Hintergrund- oder geplante Jobs ausführen kann und sich gut in Django integrieren lässt. Sellerie erfordert einen sogenannten Message Broker , um Nachrichten vom Aufruf an die Arbeiter weiterzuleiten. Dieser Nachrichtenbroker kann Redis, Rabbitmq oder sogar Django ORM / db sein, obwohl dies kein empfohlener Ansatz ist.

Bevor Sie mit dem Beispiel beginnen, müssen Sie Sellerie konfigurieren. Erstellen celery_config.py zum Konfigurieren von Sellerie in der Hauptanwendung eine Datei celery_config.py parallel zur Datei 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)

Und in die __init__.py Datei der Haupt-App importieren Sie die Sellerie-App. so was

# -*- coding: utf-8 -*- 
# Not required for Python 3. 
from __future__ import absolute_import

from .celery_config import app as celery_app  # noqa

Verwenden Sie diesen Befehl auf der Ebene, auf der sich manage.py befindet, um Sellerie-Arbeiter auszuführen.

# pros is your django project, 
celery -A proj worker -l info

Ein einfaches Beispiel zum Hinzufügen von 2 Zahlen

Um anzufangen:

  1. Installieren Sie Sellerie- pip install celery
  2. Sellerie konfigurieren (zu den Anmerkungen)
from __future__ import absolute_import, unicode_literals

from celery.decorators import task


@task
def add_number(x, y):
    return x + y

Sie können dies asynchron .delay() indem Sie die .delay() -Methode verwenden.

add_number.delay(5, 10) , wobei 5 und 10 die Argumente für die Funktion add_number

Um zu überprüfen, ob die async-Funktion den Vorgang abgeschlossen hat, können Sie die .ready() Funktion für das von der delay Methode zurückgegebene async-Objekt verwenden.

Um das Ergebnis der Berechnung .result , können Sie das .result Attribut für das async-Objekt verwenden.

Beispiel

async_result_object = add_number.delay(5, 10)
if async_result_object.ready():
    print(async_result_object.result)


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow