当前位置: 代码网 > it编程>编程语言>Asp.net > celery是什么?一文带你搞懂任务队列和worker原理(Django环境)

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

2026年07月21日 Asp.net 我要评论
一、 简介celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,它是一个专注于实时处理的任务队列,同时也支持任务调度。中文官网:celery中文官网安装pip install celery#

一、 简介

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://:password@127.0.0.1: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

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

八、正式环境后台启动

  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符号。    

九、总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com