django 任务队列

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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值