Celery:
- Celery是一个简单。灵活可靠的,处理大量消息的分布式系统,专注于实时处理的任务队列,同事也支持任务调度
celery中的几个对象要知道:
- broker:消息传输的中间键,生产者一旦有消息发送,将发送至broker(RQ,redis)
- backend:用于存储消息/任务结果,如果需要跟踪和查询任务状态,则需要添加相关配置
- worker:也就是消费者,工作者,它需要独立启动的
#test.py
from celery import Celery
#初始化celery,
app = Celery('test_01',#起个名字
broker='redis://:password@IP:6379/2',#这个是将任务放入redis的2库
backend='redis://:password@ip:6379/3'#将结果放入redis的3库
)
@app.task #创建任务函数
def task_test(a,b):
print("task is runing....")
return a+b
#终端在test.py同名目录下执行
celery -A test worker -l info
创建生产者:
在test.py文件的同级目录中进入ipython3
from test import task_test
s = task_test.delay(10,100)
s.result
#执行完毕后,worker会有相对应的日志
django 中使用celery
- 创建celery配置文件,项目同名目录下创建celery.py
- 应用下创建task.py集中定义对应worker函数
- 视图函数充当生产者,退送具体worker函数
- 项目目录下启动worker celery -A 项目同名目录名owrker -l info
正式环境后台启动celery
nohup celery -A proj worker -P gevent -c 1000 > celery.log 2>&1 &
解释:忽略linux中挂断信号,把这些进程中产生的日志重定向celery.log里面,将错误的信息同标准输出一同输出
nohup :忽略所有挂断(SIGHUP)信号
最后的&符号:代表命令在后台执行
- 标准输入是文件描述符0,它是命令的输入,缺省是键盘,也可以是文件或者其他命令的输入
- 标准输出是文件描述符1,它是命令的输出,缺省是屏幕,也可以是文件
- 标准错误是文件描述符2.这是,命令的错误输出,也可以是文件