Sök…


Anmärkningar

Selleri är en uppgiftskö som kan köra bakgrund eller schemalagda jobb och integreras med Django ganska bra. Selleri kräver något som kallas meddelandemäklare för att skicka meddelanden från kallelse till arbetarna. Den här meddelandemäklaren kan vara redis, rabbitmq eller till och med Django ORM / db även om det inte är ett rekommenderat tillvägagångssätt.

Innan du börjar med exemplet måste du konfigurera selleri. För att konfigurera selleri, skapa en celery_config.py fil i huvudappen, parallellt med filen 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)

Och i __init__.py fil importera selleri-appen. så här

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

from .celery_config import app as celery_app  # noqa

För att köra selleriarbetare använder du det här kommandot på den nivå där manage.py är.

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

Enkelt exempel för att lägga till två nummer

För att starta:

  1. Installera selleri pip install celery
  2. konfigurera selleri (gå till kommentarsektionen)
from __future__ import absolute_import, unicode_literals

from celery.decorators import task


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

Du kan köra detta asynkront med .delay() .

add_number.delay(5, 10) , där 5 och 10 är argumenten för funktionen add_number

För att kontrollera om async-funktionen har slutfört operationen kan du använda .ready() på async-objektet som returneras av delay .

För att hämta resultatet av beräkningen kan du använda .result på async-objektet.

Exempel

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow