Recherche…


Remarques

Celery est une file d'attente de tâches qui peut exécuter des tâches en arrière-plan ou planifiées et s'intègre assez bien à Django. Le céleri nécessite quelque chose connu sous le nom de courtier de messages pour transmettre les messages de l'invocation aux travailleurs. Ce courtier de messages peut être redis, rabbitmq ou même Django ORM / db, bien que cette approche ne soit pas recommandée.

Avant de commencer avec l'exemple, vous devrez configurer le céleri. Pour configurer le céleri, créez un fichier celery_config.py dans l'application principale, parallèle au fichier 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)

Et dans le fichier __init__.py l'application principale, importez l'application Céleri. comme ça

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

from .celery_config import app as celery_app  # noqa

Pour exécuter un travailleur céleri, utilisez cette commande au niveau où manage.py est.

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

Exemple simple pour ajouter 2 nombres

Pour commencer:

  1. Installer le céleri en pip install celery
  2. configurer le céleri (aller à la section des remarques)
from __future__ import absolute_import, unicode_literals

from celery.decorators import task


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

Vous pouvez l'exécuter de manière asynchrone en utilisant la méthode .delay() .

add_number.delay(5, 10) , où 5 et 10 sont les arguments de la fonction add_number

Pour vérifier si la fonction asynchrone a terminé l'opération, vous pouvez utiliser la fonction .ready() sur l'objet asynchrone renvoyé par la méthode delay .

Pour récupérer le résultat du calcul, vous pouvez utiliser l'attribut .result sur l'objet asynchrone.

Exemple

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow