阻塞高风险 分布式任务调度系统
Celery 是一个简单,灵活且可靠的,处理大量消息的分布式系统,他是一个专注于实时处理的任务队列,同时也支持任务调度
broker 消息传输的中间件,生产者一旦有消息发送,将发送至broker (rq redis)
backend 用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需要添加相关配置
worker 工作者 消费/执行broker中消息/任务的进程 —》持续盯着broker中是否有活,会自动拿到任务
celery 实时反馈不行 无法确定消费者干活的时间
使用 创建worker
from celery import Celery
app = Celery(‘name’,broker=‘redis://:password@127.0.0.1:6379/1'). 没密码:Redis://:@127.0.0.1:6379/1
创建任务函数
@app.task 加了装饰器才能是任务函数
def task_test():
print(‘xxx’) # 具体任务
启动worker
ubuntu 终端中,task.py文件同级目录下执行
celery -A tasks worker —loglevel=info #此模式默认前台启动,终端会输出相关日志
使用 创建生产者-推送任务
在task.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 task_test(a,b)
Print(‘xxxxx’). # 具体任务
return a+b
django 中使用celery。 跟django进程是独立的
1.创建celery配置文件
项目同名目录下创建celery.py
2.应用下创建tasks。py 集中定义对应worker函数
3.视图函数充当生产者,推送具体worker函数
4.项目目录下启动worker
celery -A 项目同名目录名 worker -l info
正式环境后台启动celery
nohup celery -A proj worker -P gevent -c 1000 >celery.log 2>&1 & gevent携程
#1.nohup:忽略所有挂断(SIGHUP)信号 忽略各种挂断信号,基本无敌
#2 标准输入是文件描述符0.他是命令的输入,缺省是键盘,也可以是文件或其他命令的输出
#标准输出是文件描述符1.他是命令的输出,缺省是屏幕,也可以是文件
#标准错误是文件描述符2.这是命令错误的输出,缺省是屏幕,同样也可以是文件
#3 &符号 代表将命令在后台执行