芹菜是一个基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理,如果你的业务场景中需要用到异步任务,就可以考虑使用芹菜,举几个实例场景中可用的例子:
你想对100台机器执行一条批量命令,可能会花很长时间,但你不想让你的程序等着结果返回,而是给你返回一个任务ID,你过一段时间只需要拿着这个任务ID就可以拿到任务执行结果,在任务执行荷兰国际集团(ing)进行时,你可以继续做其它的事情。
你想做一个定时任务,比如每天检测一下你们所有客户的资料,如果发现今天是客户的生日,就给他发个短信祝福
芹菜在执行任务时需要通过一个消息中间件来接收和发送任务消息,以及存储任务结果,一般使用rabbitMQ或复述,后面会讲
<强> 1.1芹菜有以下优点:
强>
-
<李>简单:一单熟悉了芹菜的工作流程后,配置和使用还是比较简单的李>
<李>高可用:当任务执行失败或执行过程中发生连接中断,芹菜会自动尝试重新执行任务李>
<李>快速:一个单进程的芹菜每分钟可处理上百万个任务李>
<李>灵活:几乎芹菜的各个组件都可以被扩展及自定制李>
芹菜基本工作流程图
<强> 1.2芹菜安装使用
强>
芹菜的默认代理是RabbitMQ,仅需配置一行就可以
broker_url=' amqp://客人:guest@localhost: 5672//
rabbitMQ没装的话请装一下
使用复述,做代理也可以
安装复述组件
pip安装- u“芹菜(复述)”
配置
配置很简单,只是复述,数据库配置的位置:
app.conf。broker_url=案词?//localhost: 6379/0”
URL的格式:
复述://:password@hostname:港口/db_number
方案后所有字段是可选的,并将默认为localhost> app.conf。result_backend=案词?//localhost: 6379/0”
<强> 1。3开始使用芹菜啦强>
安装芹菜模块
pip安装芹菜
创建一个应用程序用芹菜来定义你的任务列表
创建一个任务文件就叫tasks.py吧
从芹菜进口芹菜 应用=芹菜(“任务”, 代理=复述://localhost, 后端=复述://localhost) @app.task def添加(x, y): print(“运行…”,x, y) 返回x + y
启动芹菜工人来开始监听并执行任务
芹菜——任务的工人——loglevel=info
调用任务
再打开一个终端,进行命令行模式,调用任务
从任务导入添加 add.delay (4, 4) #
看你的工人终端会显示收到一个任务,此时你想看任务结果的话,需要在调用任务时赋值个变量
结果=add.delay (4, 4)
准备()方法返回是否已经完成处理任务:
在在在result.ready () 假,,,,,,,,
你可以等待结果完成,但是这是很少使用,因为它将异步调用变成同步>
在在在result.get(超时=1)
8
<代码>
代码>
任务提出了一个异常,得到()将re-raise例外,但是你可以通过指定传播覆盖这个论点:
在在在result.get(传播=False),,<代码>
代码>
如果任务提出了一个异常也可以访问原始回溯:
在在在result.traceback …,,,,,,
可以把芹菜配置成一个应用
目录格式如下
1项目/__init__ . py 2/celery.py 3/tasks.py
<强>项目/芹菜。py内容
强>
从进口absolute_import __future__ unicode_literals 从芹菜进口芹菜 应用=芹菜(“项目”, 代理=' amqp://', 后端=' amqp://', 包括=[' proj.tasks ']) #可选配置,请参阅用户指南的应用程序。 app.conf.update ( result_expires=3600, ) if __name__==癬_main__”: app.start ()python芹菜分布式任务队列的使用详解