Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统。专一于实时处理的异步任务队列。同时也支持任务调度。
Celery的架构由三部分组成,消息中间件(message broker),任务执行单元(worker)和任务执行结果存储(task result store)组成。redis
** 消息中间件 **
Celery自己不提供消息服务,可是能够方便的和第三方提供的消息中间件集成。包括,RabbitMQ, Redis等等架构
** 任务执行单元 **
Worker是Celery提供的任务执行的单元,worker并发的运行在分布式的系统节点中。并发
** 任务结果存储 **
Task result store用来存储Worker执行的任务的结果,Celery支持以不一样方式存储任务的结果,包括AMQP, redis等app
异步任务:将耗时操做任务提交给Celery去异步执行,好比发送短信/邮件、消息推送、音视频处理等等异步
定时任务:定时执行某件事情,好比天天数据统计async
pip install celery分布式
消息中间件:RabbitMQ/Redis加密
app=Celery('任务名',backend='xxx',broker='xxx').net
基本使用
建立项目celerytestcode
建立py文件:celery_app_task.py
import celery import time # broker='redis://127.0.0.1:6379/2' 不加密码 backend='redis://:123456@127.0.0.1:6379/1' broker='redis://:123456@127.0.0.1:6379/2' cel=celery.Celery('test',backend=backend,broker=broker) @cel.task def add(x,y): return x+y
建立py文件:add_task.py,添加任务
from celery_app_task import add result = add.delay(4,5) print(result.id)
建立py文件:run.py,执行任务,或者使用命令执行:celery worker -A celery_app_task -l info
run.py
from celery_app_task import cel if __name__ == '__main__': cel.worker_main() # cel.worker_main(argv=['--loglevel=info')
建立py文件:result.py,查看任务执行结果
```
from celery.result import AsyncResult
from celery_app_task import cel
async = AsyncResult(id="e919d97d-2938-4d0f-9265-fd8237dc2aa3", app=cel)
if async.successful():
result = async.get()
print(result)
# result.forget() # 将结果删除
elif async.failed():
print('执行失败')
elif async.status == 'PENDING':
print('任务等待中被执行')
elif async.status == 'RETRY':
print('任务异常后正在重试')
elif async.status == 'STARTED':
print('任务已经开始被执行')
```执行 add_task.py,添加任务,并获取任务ID
执行 run.py ,或者执行命令:celery worker -A celery_app_task -l info
执行 result.py,检查任务状态并获取结果
更进一步的请参考下面参考文档