1.安装celery
首先,确保你已经安装了Celery。在你的命令行中运行:
pip install celery
2.配置celery
在你的Django项目目录下(与settings.py同一级目录)创建一个celery.py文件。然后,添加以下内容:
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'gis_2.settings')
app = Celery('gis_2',backend='redis://localhost', broker='redis://localhost:6379/0')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
这将创建一个新的Celery应用,并从Django设置中配置它。
3.加载
在你的项目目录的**init.py**文件中,添加以下内容:
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
这会确保当Django项目启动时,Celery应用也会被加载。
4.创建任务
接下来,你可以开始创建任务。在你的应用目录下,创建一个新的文件tasks.py。然后,添加以下内容:
from __future__ import absolute_import, unicode_literals
from celery import shared_task
@shared_task
def add(x, y):
return x + y
这里我们创建了一个简单的任务,它接受两个参数并返回它们的和。
5.视图或者模型中执行
现在,你可以在你的视图或者模型中触发这个任务。例如,你可以在一个视图中这样做:
from django.http import HttpResponse
from .tasks import add
def index(request):
result = add.delay(4, 6)
return HttpResponse(f'Task ID: {result.task_id}')
在这个视图中,我们调用了add.delay(4, 6)来触发任务。delay方法将任务发送到队列,并立即返回一个AsyncResult对象,你可以用它来查询任务的状态或结果。
6.启动worker
最后,你需要在命令行中启动Celery worker以执行任务。在你的项目目录下,运行以下命令:
celery -A myproject worker --loglevel=info
这会启动一个Celery worker,它将开始监听任务队列并执行任务。
7.异常
7.1问题
Windows 在开发 Celery 异步任务,通过命令celery -A celery_task worker -l info启动 Celery 服务后正常;
但在使用 delay() 调用任务时会出现以下报错信息:
Task handler raised error: ValueError: not enough values to unpack (expected 3, got 0)
7.2 解决
- 安装包 eventlet
pip install eventlet - 通过以下命令启动服务
celery -A gis_2 worker -l info -P eventlet