celery常常用来做定时任务。
celery 文档:http://docs.jinkan.org/docs/celery/
安装celery:
pip install celery
何为任务队列?
任务队列是一种在线程或机器间分发任务的机制。
消息队列的输入是工作的一个单元,称为任务,独立的职程(Worker)进程持续监视队列中是否有需要处理的新任务。
Celery 用消息通信,通常使用中间人(Broker)在客户端和职程间斡旋。这个过程从客户端向队列添加消息开始,之后中间人把消息派送给职程。
Celery 系统可包含多个职程和中间人,以此获得高可用性和横向扩展能力。
Celery 是用 Python 编写的,但协议可以用任何语言实现。迄今,已有 Ruby 实现的 RCelery 、node.js 实现的 node-celery 以及一个 PHP 客户端 ,语言互通也可以通过 using webhooks 实现。
执行任务的返回值:
aa =adds.delay(11, 44)
print aa.ready() #当任务完成时是True ,否则FALSE
print aa.result #立即返回结果,如果没有结果返回none
print aa.get() #阻塞等待返回值
定时任务配置:
#celery配置信息
BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'
CELERY_TIMEZONE = 'Asia/Shanghai' # 设置时区
from datetime import timedelta
CELERYBEAT_SCHEDULE = {
'add-5-seconds': { #任务名称
'task': 'create_app.adds', #设置执行的任务
'schedule': timedelta(seconds=5), #设置间隔时间
'args': (30, 16) #设置参数
}
}
启动worker, -B可以同时启动定时任务:
$ celery worker -A celery_test_module -l info -c 3 -B
启动定时任务:
$ celery -A create_app.celery beat -l info
启动worker:
celery worker -A create_app.celery --loglevel=info --concurrency=5
同时启动beat 和worker:
celery worker -A create_app.celery --beat --loglevel=info --concurrency=5
可以开两个窗口,分别启动worker可以集群方式执行任务