没有被谁好好爱过,如果谁对我好,我会以为遇到了对的人,若有打扰到,真的不好意思。
Django celery
1、celery是一种分布式异步任务队列。
2、使用场景:
web应用:当用户在网站进行某个操作需要很长时间完成时,我们可以将这种操作交给Celery执行,直接返回给用户,等到Celery执行完成以后通知用户,提高网站的并发以及用户的体验感。
主要有:消息中间件broker、任务执行单元worker、结果存储backend
任务模块包含定时任务 celery beat 和异步任务async task
-
异步任务通常在业务逻辑中被触发并发往消息队列,而定时任务由Celery Beat进程周期性地将任务发往消息队列;
-
任务执行单元Worker实时监视消息队列获取队列中的任务执行;
-
Woker执行完任务后将结果保存在Backend中;
celery worker -A cdscp -l debug
各个参数含义:
worker: 代表启动的角色是work
-A :项目路径cdscp
-l:启动的日志级别
启动了worker,还需要通过delay或apply_async来将任务添加到worker中
3、实例演示:
**
celery_task.py
import celery
import time
app = celery.Celery("celery_test",broker='redis://:@127.0.0.1:6379/0',backend='redis://:@127.0.0.1:6379/1')
@app.task
def send_email(param):
time.sleep(5)
print '向{}发送邮件'.format(param)
return "ok"
@app.task
def send_msg(param):
time.sleep(5)
print '向{}发送短信'.format(param)
return "ok"
produce_task.py
from celety_task import send_email, send_msg
result = send_email.delay('王子')
print result.id
result = send_msg.delay('王子')
print result.id
get_result.py
from celery.result import AsyncResult
from celety_task import app
ansyc_result = AsyncResult(id='f07403ed-90e0-42a1-b1bb-a2d75869495b', app=app)
if ansyc_result.successful():
result = ansyc_result.get()
print result
elif ansyc_result.failed():
print "failed"
elif ansyc_result.status == 'pending':
print 'pending'
elif ansyc_result.status == 'retry':
print 'retry'
elif ansyc_result.status == 'started':
print 'started'
celery worker -A celety_task -l info
出现下图,表示worker启动成功
任务执行成功之后会生成对应的任务id,redis中可以进行查询
通过celery的AsyncResult对象获取执行结果