celeryAan de slag met selderij


Opmerkingen

"Selderij is een asynchrone taakwachtrij / taakwachtrij op basis van het doorgeven van gedistribueerde berichten." - http://www.celeryproject.org/

Selderij is geweldig voor asynchrone en geplande achtergrondtaken. Het wordt vaak gebruikt voor langdurige taken die deel uitmaken van een Django- of Flask-toepassing.

Selderij + Redis

Installatie

Extra afhankelijkheden zijn vereist voor Redis-ondersteuning. Installeer zowel Celery als de afhankelijkheden in één keer met de bundel celery[redis] :

$ pip install -U celery[redis]
 

Configuratie

Configureer de locatie van uw Redis-database:

BROKER_URL = 'redis://localhost:6379/0'
 

De URL moet de volgende indeling hebben:

redis://:password@hostname:port/db_number
 

Toepassing

Maak het bestand task.py:

from celery import Celery

BROKER_URL = 'redis://localhost:6379/0'
app = Celery('tasks', broker=BROKER_URL)

@app.task
def add(x, y):
    return x + y
 

Het eerste argument voor Celery is de naam van de huidige module. Op deze manier kunnen namen automatisch worden gegenereerd. Het tweede argument is het broker sleutelwoord dat de URL van de berichtenbroker aangeeft.

De server voor selderij uitvoeren

Voer de werker uit door het werkargument uit te voeren:

$ celery -A tasks worker --loglevel=info
 

De taak aanroepen

Gebruik de methode delay() om de taak aan te roepen.

>>> from tasks import add
>>> add.delay(4, 4)
 

Een taak aanroepen retourneert een AsyncResult- instantie, die de status van de taak kan controleren, wachten tot de taak is voltooid of de retourwaarde krijgt. (Als de taak is mislukt, krijgt deze de uitzondering en traceback).

Resultaten behouden

Om de status van de taak bij te houden, moet Celery de staten ergens opslaan of verzenden. Gebruik Redis als backend voor het resultaat:

BROKER_URL = 'redis://localhost:6379/0'
BACKEND_URL = 'redis://localhost:6379/1'
app = Celery('tasks', broker=BROKER_URL, backend=BACKEND_URL)
 

Zie Resultaatbackends voor meer informatie over resultaatbackends.

Nu de resultaatbackend is geconfigureerd, roept u de taak opnieuw op. Houd deze keer vast aan de AsyncResult- instantie die is teruggekeerd van de taak:

>>> result = add.delay(4, 4)
 

De methode ready() retourneert of de taak is verwerkt of niet:

>>> result.ready()
False
 

Het is mogelijk om te wachten tot het resultaat is voltooid, maar dit wordt zelden gebruikt omdat het de asynchrone aanroep in een synchrone aanroep verandert:

>>> result.get(timeout=1)
8
 

Gebaseerd op officieel document van selderij

Installatie of instellingen

Je kunt Celery installeren via de Python Package Index (PyPI) of vanaf de bron.

Om de nieuwste versie te installeren met behulp van pip :

$ pip install celery
 

Installeren met easy_install :

$ easy_install celery
 

Downloaden en installeren vanaf de bron

Download de nieuwste versie van Celery van http://pypi.python.org/pypi/celery/

U kunt het installeren door het volgende te doen:

$ tar xvfz celery-0.0.0.tar.gz
$ cd celery-0.0.0
$ python setup.py build
# python setup.py install # as root