Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,它是一个专注于实时处理的任务队列,同时也支持任务调度。
中文官网:
celery中文官网
安装
pip install celery #查看是否存在 pip freeze|grep -i '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")
ubuntu 终端中,task.py文件同级目录下执行下面命令:
#此模式默认为前台启动,终端中会输出相关日志。 celery -A tasks worker --loglevel=info
在tasks.py 文件的同级目录下进入ipython3 执行如下代码:
from tasks import task_test task_test.delay() 执行完毕后,观察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
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符号。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。
您可能感兴趣的文章: