Python Celery分布式任务队列的安装方法
Python Celery分布式任务队列的安装方法
本篇内容介绍了“Python Celery分布式任务队列的安装方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Celery是一个基于Python编写的分布式任务队列(Distributed Task Queue),通过对Celery进行简单操作就可以实现任务(耗时任务, 定时任务)的异步处理
一. Celery的安装
Celery4.0版本开始,不支持windows平台
1.1通过pip方式安装celery
pipinstall-U"Celery[redis]"
注意事项:
在windows上安装后,可能会出现如下报错:
ValueError:'__name__'in__slots__conflictswithclassvariable
此时先卸载celery, 然后尝试通过如下命令重新进行安装
pipinstall-Uhttps://github.com/celery/py-amqp/zipball/masterpipinstall-Uhttps://github.com/celery/billiard/zipball/masterpipinstall-Uhttps://github.com/celery/kombu/zipball/masterpipinstall-Uhttps://github.com/celery/celery/zipball/masterpipinstall-U"Celery[redis]"
1.2 给celery创建一个软连接
ln-s~/.venv/project_dj/bin/celery/usr/bin/celery
1.3 执行celery命令
[root@localhost~]$celery--helpOptions:-A,--appAPPLICATION-b,--brokerTEXT--result-backendTEXT--loaderTEXT--configTEXT--workdirPATH-C,--no-color-q,--quiet--version--helpShowthismessageandexit.Commands:amqpAMQPAdministrationShell.beatStartthebeatperiodictaskscheduler.callCallataskbyname.controlWorkersremotecontrol.eventsEvent-streamutilities.graphThe``celerygraph``command.inspectInspecttheworkeratruntime.listGetinfofrombroker.logtoolThe``celerylogtool``command.migrateMigratetasksfromonebrokertoanother.multiStartmultipleworkerinstances.purgeEraseallmessagesfromallknowntaskqueues.reportShowsinformationusefultoincludeinbug-reports.resultPrintthereturnvalueforagiventaskid.shellStartshellsessionwithconvenientaccesstocelerysymbols.statusShowlistofworkersthatareonline.upgradePerformupgradebetweenversions.workerStartworkerinstance.
二. Celery的基本使用
2.1创建celery应用, 并定义任务
#-*-coding:utf-8-*-#@Time:2021/5/2411:20#@Author:chinablue#@File:task.pyfromceleryimportCelery#创建一个app(Celery实例),作为所有celery操作的切入点broker_url=f"redis://:123456@127.0.0.1:6379/5"backend_url=f"redis://:123456@127.0.0.1:6379/6"app=Celery("tasks",broker=broker_url,backend=backend_url)#定义一个任务@app.taskdefadd(x,y):returnx+y
事项说明:
1) 创建Celery实例时,需要指定一个消息代理(broker)来接收和发送任务消息. 本文使用的是Redis(docker redis搭建)
2) broker和backend参数的格式:redis://:password@hostname:port/db_number
2.2 启动celery worker服务端
celery-Atasksworker--loglevel=INFO
事项说明:
1) 在生产环境中, 会使用supervisor工具将celery服务作为守护进程在后台运行
2.3调用任务
打开终端, 进入python命令行模式:
>>>result=add.delay(4,4)>>>result=add.apply_async((4,4),countdown=5)
事项说明:
1)add.apply_async((4, 4))可以简写为add.delay(4, 4)
2) add.apply_async((4, 4), countdown=5)表示任务发出5秒后再执行
2.4追踪任务信息
若想获取每个任务的执行信息,在创建Celery实例时, 需要指定一个后端(backend). 本文使用的是Redis(docker redis搭建)
result=add.delay(4,4)result.ready()#任务状态:进行中,已完成result.failed()#任务完成,任务失败result.successful()#任务完成,任务成功result.state#任务状态:PENDING,STARTED,SUCCESSresult.get()#获取任务的返回值result.get(timeout=10)result.get(propagate=False)#如果任务引发了异常,propagate=False表示异常不会被抛出来(默认情况会抛出来)result.id#任务id
注意事项:
1) 在celery中,如果想配置backend参数,有如下三种方式
#-*-coding:utf-8-*-#@Time:2021/5/2411:20#@Author:chinablue#@File:task.pyfromceleryimportCelery#创建一个app(Celery实例),作为所有celery操作的切入点broker_url=f"redis://:123456@127.0.0.1:6379/5"backend_url=f"redis://:123456@127.0.0.1:6379/6"app=Celery("tasks",broker=broker_url,backend=backend_url)#定义一个任务@app.taskdefadd(x,y):returnx+y
方式1: 实例化Celery时传入
#-*-coding:utf-8-*-#@Time:2021/5/2411:20#@Author:chinablue#@File:task.pyfromceleryimportCelerybroker_url=f"redis://:123456@127.0.0.1:6379/5"backend_url=f"redis://:123456@127.0.0.1:6379/6"app=Celery("tasks")app.conf.update({"broker_url":broker_url,"result_backend":backend_url,})#定义一个任务@app.taskdefadd(x,y):returnx+y
方式2: 通过conf的update方法
#-*-coding:utf-8-*-#@Time:2021/5/2411:20#@Author:chinablue#@File:task.pyfromceleryimportCelerybroker_url=f"redis://:123456@127.0.0.1:6379/5"backend_url=f"redis://:123456@127.0.0.1:6379/6"app=Celery("tasks")app.conf.broker_url=broker_urlapp.conf.result_backend=backend_url#定义一个任务@app.taskdefadd(x,y):returnx+y
“Python Celery分布式任务队列的安装方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...