Ricerca…


Osservazioni

Celery è una coda di attività che può eseguire lavori in background o pianificati e si integra abbastanza bene con Django. Celery richiede qualcosa di conosciuto come broker dei messaggi per passare i messaggi dall'invocazione ai lavoratori. Questo broker di messaggi può essere redis, rabbitmq o anche Django ORM / db anche se questo non è un approccio raccomandato.

Prima di iniziare con l'esempio, dovrai configurare il sedano. Per configurare il sedano, creare un file celery_config.py nell'app principale, parallelamente al file 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)

E nel file __init__.py dell'app principale, importa l'app di sedano. come questo

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

from .celery_config import app as celery_app  # noqa

Per eseguire il gestore di sedici, utilizzare questo comando al livello in cui è manage.py.

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

Semplice esempio per aggiungere 2 numeri

Per iniziare:

  1. Installa sedano per pip install celery
  2. configurare il sedano (vai alla sezione commenti)
from __future__ import absolute_import, unicode_literals

from celery.decorators import task


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

È possibile eseguire questo in modo asincrono utilizzando il metodo .delay() .

add_number.delay(5, 10) , dove 5 e 10 sono gli argomenti per la funzione add_number

Per verificare se la funzione asincrona ha terminato l'operazione, è possibile utilizzare la funzione .ready() sull'oggetto async restituito dal metodo delay .

Per recuperare il risultato del calcolo, è possibile utilizzare l'attributo .result sull'oggetto async.

Esempio

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow