Django
비동기 작업 (셀러리)
수색…
비고
Celery는 백그라운드 작업이나 예약 된 작업을 실행할 수 있고 Django와 잘 통합되는 작업 대기열입니다. 셀러리에는 메시지 브로커 (message broker) 라는 메시지가 호출에서 작업자에게 전달되어야합니다. 이 메시지 브로커는 redis, rabbitmq 또는 심지어 Django ORM / db 일 수 있지만 권장되는 방법은 아닙니다.
예를 시작하기 전에 셀러리를 구성해야합니다. 셀러리를 구성하려면 주 앱에서 settings.py
파일과 병행하여 celery_config.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)
그리고 주 앱의 __init__.py
파일에서 셀러리 앱을 가져옵니다. 이렇게
# -*- coding: utf-8 -*-
# Not required for Python 3.
from __future__ import absolute_import
from .celery_config import app as celery_app # noqa
셀러리 작업자를 실행하려면 manage.py가있는 수준에서이 명령을 사용하십시오.
# pros is your django project,
celery -A proj worker -l info
2 개의 숫자를 더하는 간단한 예
시작하려면 :
- 셀러리
pip install celery
- 셀러리를 구성하십시오 (비고 부분으로 가십시오).
from __future__ import absolute_import, unicode_literals
from celery.decorators import task
@task
def add_number(x, y):
return x + y
이 메서드는 .delay()
메서드를 사용하여 비동기 적으로 실행할 수 있습니다.
add_number.delay(5, 10)
, 여기서 5와 10은 add_number
함수의 인수입니다.
비동기 함수가 작업을 완료했는지 확인하려면 delay
메소드에서 반환 한 비동기 객체에서 .ready()
함수를 사용할 수 있습니다.
계산 결과를 가져 오려면 async 객체에서 .result
속성을 사용할 수 있습니다.
예
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
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow