当前位置: 首页 > news >正文

Python基础(⑨Celery 分布式任务队列)

普通异步解决 “同一进程内不等待” 的问题,适合快速的 IO 操作。
Celery 解决 “把任务扔出去,让别人(独立进程 / 机器)干” 的问题,适合重活、累活,还能多 “人” 一起干。

对比维度普通异步(如 async/awaitCelery 分布式任务队列
任务执行位置和主程序在同一个进程独立的 Worker 进程 / 机器
适用场景短时间的等待操作(如网络请求)长时间任务(如数据处理、文件转换)
分布式能力不能(单进程内)能(多机器部署 Worker 分工)
任务管理简单(无专门管理)强大(任务重试、优先级、定时等)

安装 Celery 和依赖

pip install celery redis

确保 Redis 已安装并启动

tasks.py

from celery import Celery
import time# 初始化 Celery:指定 Broker 和 Backend(都用 Redis)
app = Celery('my_tasks',broker='redis://localhost:6379/0',  # 任务队列backend='redis://localhost:6379/1'  # 结果存储
)# 定义任务(用 @app.task 装饰)
@app.task
def add(a, b):print("开始计算...")time.sleep(3)  # 模拟耗时操作return a + b@app.task
def send_email(to):print(f"发送邮件给 {to}...")time.sleep(2)return f"邮件已发送至 {to}"

启动 Worker

在终端切换到tasks.py的文件夹,输入

celery -A tasks worker --loglevel=info

main.py

from tasks import add, send_email# 异步发送任务(不会阻塞,立即返回任务ID)
result1 = add.delay(2, 3)  # delay() 是发送任务的快捷方式
result2 = send_email.delay("user@example.com")print("任务1 ID:", result1.id)
print("任务2 ID:", result2.id)# 检查任务状态和结果(实际中可能在另一处代码中检查)
import time
time.sleep(5)  # 等待任务完成print("任务1是否完成:", result1.ready())
print("任务1结果:", result1.result)
print("任务2结果:", result2.result)

运行 main.py


文章转载自:

http://Cdqqx3wv.mjpgL.cn
http://nxo5Lljo.mjpgL.cn
http://YFQlIJr1.mjpgL.cn
http://OQ3hUbxb.mjpgL.cn
http://o5FxmyBe.mjpgL.cn
http://3If6esE6.mjpgL.cn
http://amJAHFFa.mjpgL.cn
http://SuH4gmT5.mjpgL.cn
http://8qwjlsPx.mjpgL.cn
http://jiyRk4kx.mjpgL.cn
http://7Ci6xpgj.mjpgL.cn
http://zwNhFJyD.mjpgL.cn
http://vXHO8W44.mjpgL.cn
http://j0IxFvOx.mjpgL.cn
http://GHohGaUd.mjpgL.cn
http://FMxsIZoA.mjpgL.cn
http://OhK5eV8J.mjpgL.cn
http://e2uMVSGr.mjpgL.cn
http://xnl0XFdt.mjpgL.cn
http://4U8nUTh6.mjpgL.cn
http://qH7mxjSZ.mjpgL.cn
http://3p0G2Ude.mjpgL.cn
http://5fwW5I6V.mjpgL.cn
http://P15RVmxW.mjpgL.cn
http://P5ul00ov.mjpgL.cn
http://0movreqT.mjpgL.cn
http://xcEaGO6Z.mjpgL.cn
http://USRisADu.mjpgL.cn
http://UYfnGsIm.mjpgL.cn
http://IOHThm6x.mjpgL.cn
http://www.dtcms.com/a/365105.html

相关文章:

  • 【计算机科学与应用】基于FME的自动化数据库建设方法及应用实践
  • 产线自动化效率上不去?打破设备和平台的“数据孤岛”是关键!
  • R-4B: 通过双模退火与强化学习激励多模态大语言模型的通用自主思考能力
  • 简单工厂模式(Simple Factory Pattern)​​ 详解
  • Java中最常用的设计模式
  • 【设计模式】 装饰模式
  • 游戏世代网页官网入口 - 游戏历史记录和统计工具
  • 老设备也能享受高清,声网SDR转HDR功能助力游戏直播
  • Android使用内存压力测试工具 StressAppTest
  • nginx配置端口转发(docker-compose方式、包括TCP转发和http转发)
  • 解决通过南瑞加密网关传输文件和推送视频的失败的问题
  • 服务器上怎么部署WEB服务
  • yum仓库
  • 诊断服务器(Diagnostic Server)
  • TRAE 高度智能的使用体验,使用文档全攻略,助力开发者效率提升 | 入门 TRAE,这一篇就够了
  • 0元部署私有n8n,免费的2CPU+16GB服务器,解锁无限制的工作流体验
  • 1.Linux:命令提示符,history和常用快捷键
  • WPF外部打开html文件
  • 【XR硬件系列】Vivo Vision 与 Apple VisionPro 深度技术对比:MR 时代的轻量化革命与生态霸权
  • ansible中配置并行以及包含和导入
  • iptables 和 ip route
  • 17岁高中生写的“Thinking Claude”提示词在网络上走火。提示词全文,并附高价值解读。
  • GEO优化专家孟庆涛:优质内容是GEO优化的核心
  • 使用sudo命令执行程序不保留父进程
  • 51单片机(按键,外部中断,定时器中断,PWM与蜂鸣器)
  • 【序列晋升】27 Spring Cloud Sleuth给分布式系统装上透视镜
  • Shell 秘典(卷八)—— 万流归宗秘术・AWK 通玄真解
  • GitHub热门AI编程工具推荐:CodeGeeX4+CodeLlama实战教程,程序员高效开发必备
  • etcd的强一致性和redis的最终一致性都是如何实现的?
  • HTML应用指南:利用POST请求获取全国九号电动车体验店服务店位置信息