前言
celery是一个基于python开发的简单、灵活且可靠的分布式任务队列框架, 是一个分布式队列的管理工具, 可以用 Celery 提供的接口快速实现并管理一个分布式的任务队列.。它采用了典型的生产者-消费者模型,主要由三部分组成:
-
消息队列broker:broker实际上就是一个MQ队列服务,可以使用Redis、RabbitMQ等作为broker;
-
处理任务的消费者workers:broker通知worker队列中有任务,worker去队列中取出任务执行,每一个worker就是一个进程;
-
存储结果的backend:执行结果存储在backend,默认也会存储在broker使用的MQ队列服务中,也可以单独配置用何种服务做backend;
celery安装
pip install celery
celery 简单运行
安装完成后在自己的APP下创建一个tasks.py文件,名字最好就是tasks,不要随意更改,有多个app则每个app下都可以创建一个task.py(前提是有需要的话)目录结构如下,本文已django为例:
my_demo |--func_app |-- admin.py |-- apps.py |-- __init__.py |-- models.py |-- tasks.py |-- tests.py |-- urls.py |-- views.py |--my_demo |-- celery.py |-- __init__.py |-- settings.py |-- urls.py |-- wsgi.py
tasks.py from celery import Celery app = Celery('tasks', broker='redis://:password@host:port/database_num',backend='redis://:password@host:port/database_num') #第一个次数‘tasks’是当前模块的名字,第二个参数是broker代理的url,这里选用了redis
第一个参数 ‘tasks’ 是当前模块的名字,第二个参数是消息队列broker的url,第三个参数是存放结果的backend,这里都选用了redis(也可以是RabbitMQ)。
tasks.py from celery import Celery app = Celery('tasks', broker='redis://:password@host:port/database_num',backend='redis://:password@host:port/database_num') @app.task def add(x, y): return x + y if __name__ == '__main__': res = add.delay(3,4) print(res.result)#打印结果
定义一个简单的add函数,使用delay()方法进行调用,res.result 返回celery计算的结果,先不要急着运行,这样肯定运行不成功的。
接下来我们去坐准备工作,一般我们的服务都会部署到linux服务器上,假设你现在已经有一台自己的服务器,那么请使用SecureCRT或者putty连接上机器,还是先安装redis和celery,快捷安装如下:
Redis安装——-10分钟安装配置Redis
pip install celery
创建一个目录专门用于执行celery程序(位置随你高兴),再创建一个tasks.py:
mkdir celery_code#创建目录 cd celery_code#进入目录下面 touch tasks.py #创建tasks.py文件,功能与刚才上面的一样 vi tasks.py #打开文件
vi tasks.py 后按下键盘上的i键,复制刚才的代码粘贴进这个文件,按下ESC,SHIFT+:,输入wq保存退出,分别输入以下命令。
chmod +x tasks.py #给tasks.py赋予可执行权限 celery -A tasks worker --loglevel=info ##运行celery
如果顺利的话,你将看到如下界面:
运行程序
忽略最后一行,这就代表启动成功了,接着你可以在你的window开发环境上运行程序了,运行后应该能看到如下:
Linux:
可以清楚的看到celery在Received到task后很快woker就开始工作,返回了tasks.add执行success,tasks即我们的模块名称,add为我们定义的方法名,success代表执行成功,后面的一串小数即为执行的时间,7为我们想要的执行结果。
Windows:
而我们pycharm下同样也返回了结果7,执行成功!!!
这时如果你有兴趣的话可以登录redis查看broker和backend:
redis-cli #连接redis客户端 select database_num #为你在前面配置的worker和backend的数据库编号 keys * #查看执行过的任务编号
仔细查看最后标红的一行,如果与前面运行程序中的celery结果图对比就会发现,后面的编号其实是一样的,可以断定这就是我们刚才运行的任务编号,这时就可以根据这个key查询celery返回的信息。
截图可能不太清晰,但依然能看到状态status是success,result是7,task_id是上图标红的那串。
结束
本文介绍了怎么安装运行celery,当然本文中所使用的的add函数是极为简单的,后续将更新配置文件化和较常用的celery发送邮件、celery定时任务,更多内容请点击从今天开始种树。
相关推荐: Wordpress 3.4 - 3.5.1 逻辑问题导致的 DoS
英文原文:WordPress 3.5.1, Denial of Service [UPDATE] 中文译文:Wordpress 3.4 - 3.5.1 逻辑问题导致的 DoS 最终产生 DoS 效果的代码在通用组件phpass中,wp 中位于 /wp-incl…
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论