Django + celery 异步处理耗时任务

我的项目目录结构如下所示, begin是我的应用

 

 这里需要更改的是上图标记的三个文件以及settings.py文件,tasks.py文件是创建在django的应用下面,顾名思义里面放的就是我需要调用的耗时的任务。

1.创建celery.py文件

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# 设置django环境
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_project.settings")
app = Celery("test_project")

app.config_from_object('django.conf:settings', namespace='CELERY')
# 发现任务文件每个app下的task.py
app.autodiscover_tasks()

2.修改__init__.py文件

from __future__ import absolute_import, unicode_literals

# 这将确保在Django启动时始终导入应用程序,以便shared_task使用该应用程序。
from .celery import app as celery_app

__all__ = ["celery_app"]

3.修改settings.py文件

在最后添加下面内容,这里我使用redis做celery的消息队列

CELERY_BROKER_URL = 'redis://127.0.0.1:6379/3'  # Broker配置,使用Redis作为消息中间件

# CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/3'  # BACKEND配置,这里使用redis

# CELERY_RESULT_SERIALIZER = 'json'  # 结果序列化方案

我项目执行的结果是写入文件中,所以不需要将结果序列化到redis中,就将对应代码注释了。

4.在应用下面创建tasks.py文件,该文件名好像是固定的,忘记了

做为演示,我创建一个函数如下所示

from celery.task import task
import time

@task
def execute(key):
    print('开始执行耗时间的任务: {}'.format(key))
    time.sleep(30)

在 views.py 中测试调用该函数

from .tasks import execute

...

def test_celery(request):
    key = '***'
    result = execute.delay(key)
    print(result)
    return render(request, "celery.html")

我的函数那边需要接收参数,所以调用这边将参数传入到 delay 中即可,不穿参数的话就置空

测试前要先开启celery

celery -A test_project worker -P eventlet --loglevel=INFO --concurrency=10

这里我指定了10个worker, 默认worker的数量是你的CPU核心数

PS:celery4.x 在win10上使用 需要安装 eventlet包

pip install eventlet

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django Celery 是一个用于 Django 框架的分布式任务队列工具。它结合了 Django 的 Web 开发能力和 Celery异步任务处理能力。通过使用 Celery,你可以将耗时任务(如发送电子邮件、处理图像、执行定时任务等)从主线程中分离出来,以提高应用的性能和响应速度。 你可以通过以下步骤来集成 DjangoCelery: 1. 安装 Celery:在命令行中使用 pip 安装 Celery 库:`pip install celery` 2. 配置 Celery:在 Django 项目的 settings.py 文件中配置 Celery 相关的设置,主要包括消息代理器(message broker)的设置和任务结果存储的设置。 3. 创建任务:在 Django 项目中创建需要异步执行的任务任务是一个 Python 函数,使用 `@task` 装饰器进行标记。 4. 启动 Celery Worker:在命令行中使用 `celery -A your_project_name worker --loglevel=info` 启动 Celery Worker,该命令会监听并执行任务队列中的任务。 5. 触发任务:在你的 Django 代码中调用任务函数,可以使用 `your_task.delay()` 来触发异步执行任务。 这样,当你触发任务时,它会被添加到 Celery任务队列中,并由 Celery Worker 异步执行。执行结果可以存储在指定的结果存储中,也可以通过回调函数获取。 注意:配置消息代理器和结果存储器时,你可以选择使用不同的后端,如 RabbitMQ、Redis、Amazon SQS 等。 以上是关于 Django Celery 的简要介绍和基本使用步骤,如果你有具体问题或需要更详细的指导,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值