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 3.12 新特性解析:模式匹配增强与性能优化实战
-
Lightly IDE 深度评测:轻量级 Python 开发工具是否适合团队协作?
-
VS Code 自定义配置:JSON 文件修改、代码片段与任务自动化脚本
-
Python 虚拟环境选择:venv、conda、poetry 的适用场景对比
-
PyCharm+GitHub Copilot:Python 开发中 AI 辅助编码的最佳实践
-
PyCharm 无法识别虚拟环境?5 步排查 Python 解释器配置问题
-
数据科学工具链:Jupyter Notebook+RStudio+Python 的协同工作流
-
Python 3.12 新特性:模式匹配增强与性能改进实战
-
Lightly IDE 适合谁?轻量级 Python 开发工具深度评测
-
Python IDE 终极对比:PyCharm vs VS Code vs Jupyter Notebook