08 python celery介绍和基本使用
celery分布式任务队列
RPC远程,当执行一条命令,等待远程执行结果返回客户端。
在Linux上可以在后台执行,不影响其他任务执行。(涉及到异步)
1、分布式任务运算celery
参考:https://www.cnblogs.com/alex3714/p/6351797.html
任务计划:https://www.cnblogs.com/peida/archive/2013/01/08/2850483.html
Crontab操作系统本身任务计划
Celery也可以实现定时任务,不需要操作系统。
Rabbitmq也可以实现异步。
2、测试代码:
Celery在Windows上执行有问题,在Linux上使用。
[[email protected] testcleery]# celery -A celery_test worker -l debug 启动过程中可能需要调整环境变量。export C_FORCE_ROOT=True
[[email protected] testcleery]# export C_FORCE_ROOT=True
[[email protected] testcleery]# celery -A celery_test worker -l info
查看日志,任务模块加载成功。Celery两个模块都已加载下来。
测试celery模块。
3、测试同时启动2个worker服务。
[[email protected] testcleery]# export C_FORCE_ROOT=True
[[email protected] testcleery]# celery -A celery_test worker -l info
[[email protected] testcleery]# celery -A celery_test worker -l debug
两个worker抢任务,随机分发任务到worker。
多开几个终端进行测试,应用程序会随机选择worker。
4、来个复杂任务,按照生产情况,执行过程很长的服务
[[email protected] testcleery]# vim celery_test2.py
[[email protected] testcleery]# celery -A celery_test2 worker -l info
[email protected] testcleery]# python
>>> from celery_test2 import add,cmd
>>> t1 = cmd.delay(‘abcedef‘)
>>> t1.ready()
False
>>> t1.ready()
True
>>> t1.get()
1569491327.817837
>>>
10s任务卡住了。
当t1.ready()变成true,可以取值。
5、在项目中使用。指定项目文件。
[[email protected] testcleery]# mkdir pro
[[email protected] testcleery]# cd pro/
[[email protected] pro]# pwd
/root/testcleery/pro
[[email protected] pro]# touch __init__.py
项目目录结构和项目启动方式。
[[email protected] pro]#
生产项目编写。
[[email protected] testcleery]# vim pro/celery.py
from __future__ import absolute_import, unicode_literals
from celery import Celery # 默认从Python绝对路径引入celery包
配置认为列表项。
启动celery项目。
[[email protected] testcleery]# celery -A pro worker -l debug
[[email protected] testcleery]# python
Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pro import tasks, tasks2
>>> t1 = tasks2.cmd(‘df‘)
running cmd... df
>>> t1=tasks.xsum.delay([1,2,4,3,2])
>>> t1.get()
12
>>>
Celery跟Django结合使用的比较多。后面章节重点讲解。
Celery做定时任务。
后台启动方式,
[[email protected] testcleery]# celery multi start w1 -A pro worker -l info 启动
[[email protected] testcleery]# celery multi stop w1 -A pro worker -l info 关闭
观察到,一个worker任务有3个进程在跑。
https://www.cnblogs.com/alex3714/p/6351797.html
停止任务
celery multi stopwait w1 -A proj -l info
原文地址:https://www.cnblogs.com/sunnyyangwang/p/11636910.html