Zoeken…


Opmerkingen

Selderij is een takenwachtrij die achtergrond- of geplande taken kan uitvoeren en die vrij goed met Django kan worden geïntegreerd. Selderij vereist iets dat bekend staat als berichtenmakelaar om berichten van aanroeping door te geven aan de werknemers. Deze berichtenmakelaar kan redis, rabbitmq of zelfs Django ORM / db zijn, hoewel dat geen aanbevolen aanpak is.

Voordat u aan het voorbeeld begint, moet u selderij configureren. Om selderij te configureren, maakt u een bestand celery_config.py in de hoofdapp, parallel aan het bestand 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)

En importeer in het __init__.py bestand van de __init__.py de selderie-app. soortgelijk

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

from .celery_config import app as celery_app  # noqa

Om de bleekselderij uit te voeren, gebruikt u deze opdracht op het niveau waar manage.py is.

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

Eenvoudig voorbeeld om 2 nummers toe te voegen

Starten:

  1. Installeer selderij pip install celery
  2. selderij configureren (ga naar het gedeelte met opmerkingen)
from __future__ import absolute_import, unicode_literals

from celery.decorators import task


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

U kunt dit asynchroon uitvoeren met de methode .delay() .

add_number.delay(5, 10) , waarbij 5 en 10 de argumenten zijn voor de functie add_number

Als u wilt controleren of de functie async de bewerking heeft voltooid, kunt u de functie .ready() op het async-object dat wordt geretourneerd door de delay .

Om het resultaat van de berekening op te halen, kunt u het kenmerk .result op het async-object.

Voorbeeld

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow