一、 简介
celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,它是一个专注于实时处理的任务队列,同时也支持任务调度。
中文官网:
安装
pip install celery #查看是否存在 pip freeze|grep -i 'celery'
二 名词解释
- broker—消息传输的中间件,生产者一旦有消息发送,将发至broker【rq,redis】
- backend-用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需添加要配置相关。
- 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符号。
九、总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论