一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

celery是什么 一文带你搞懂任务队列和worker原理 Django环境

时间:2026-07-22 09:14:02 编辑:袖梨 来源:一聚教程网

一、 简介

Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,它是一个专注于实时处理的任务队列,同时也支持任务调度。

中文官网:

celery中文官网

安装

pip install celery

#查看是否存在
pip freeze|grep -i 'celery'

二 名词解释

  1. broker—消息传输的中间件,生产者一旦有消息发送,将发至broker【RQ,Redis】
  2. backend-用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需添加要配置相关。
  3. worker-工作者-消费/执行broker中消息/任务的进程。

三、使用celery

from celery import Celery
app = Celery('kqlproject',broker='redis://:[email protected]:6379/1')
#app = Celery('dadablog',broker='redis://:@127.0.0.1:6379/1')
#第一个参数为自定义名字,

#创建任务函数
@app.task
def task_test():
    print("task is running")

四、启动worker

ubuntu 终端中,task.py文件同级目录下执行下面命令:

#此模式默认为前台启动,终端中会输出相关日志。
celery -A tasks worker --loglevel=info

五、创建生产者-推送任务

在tasks.py 文件的同级目录下进入ipython3 执行如下代码:

from tasks import task_test
task_test.delay()

执行完毕后,观察worker的日志。

六、存储执行结果-worker

Celery提供存储任务执行结果的方案,需借助redis或mysql或Memcached等。

from celery import Celery
app = Celery(
   'demo',
   broker='redis://@127.0.0.1:6379/1',
   backend='redis://@127.0.0.1:6379/2',
)
#创建任务函数
@app.task
def test_tak(a,b):
    print("task is runing")
    return a+b

七、Django中使用celery

1.创建celery配置文件

项目同名目录下创建celery.py

2.应用下创建task.py集中定义对应的work函数。

3.视图函数充当生产者,推送具体worker函数。

4.项目目录下启动worker

celery -A 项目同名目录名 worker -l info

在settings同级目录下新建celery.py,代码如下:

# @Author : Kql
# @Time : 2023/6/19 18:50

from celery import Celery
from django.conf import settings
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dadablog.settings')

app = Celery('dadablog')
app.conf.update(
    BROKER_URL='redis://:@127.0.0.1:6379/1'
)
# 自动去注册应用下寻找加载worker函数
app.autodiscover_tasks(settings.INSTALLED_APPS)

在每个应用下分别创建执行任务的函数:

# @Author : Kql
# @Time : 2023/6/19 18:57

# 发送短信
from tools.sms import YunTongXin
from dadablog.celery import app


@app.task
def send_sms_c(phone, code):
    config = {
        "accountSid": "2c94811c***********",
        "accountToken": "bd81141c************8",
        "appId": "2c94811c88b*****************",
        "templateId": "1"
    }
    yun = YunTongXin(**config)
    res = yun.run(phone, code)
    return res

如下:红色方框内显示内容为任务正常执行的输出。

celery是什么?一文带你搞懂任务队列和worker原理(Django环境)

八、正式环境后台启动

  nohub celery -A projetname worker -P gevent -c 1000 > celery.log 2>&1 &

  #1. nohub 忽略所有挂断信号(sighup)
  #2. projectname 项目配置目录 
  #3. -P 使用python协程进行任务的开启,开启1000个协程
  #4. celery.log 在当前目录下生成日志文件,也可以使用绝对路径。
  #5. 标准输入输入是文件描述符0,它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
  #6. 标准输出输出是文件描述符1,它是命令的输出,缺省是屏幕,也可以是文件。
  #7. 标准错误输入是文件描述符2,这是命令错误的输出,缺省是屏幕,也可以是文件。
  #8. &符号:代表将命令在后台启动。
  #9. 2>&1 将错误输出重定向给标准输出,中间加&f符号。    

九、总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

您可能感兴趣的文章:
  • django项目如何用celery实现异步任务?完整步骤分享
  • Django Celery Redis异步发邮件怎么做?完整配置教程分享
  • Celery定时任务组件之Django+Celery项目实战教程
  • django+celery如何实现定时拉取阿里云rocketmq实例信息
  • django celery定时任务实战详解
  • Celery+django+redis异步执行任务的实现示例

热门栏目