一个比 Celery 轻量好用的异步任务工具
1. 安装 RQ
pip install rq
2. 核心概念
Queue(队列)
from rq import Queue
from redis import Redis# 创建 Redis 连接
redis_conn = Redis()# 创建队列对象
queue = Queue(connection=redis_conn)
Job(任务)
def say_hello(name):
return f"Hello, {name}!"# 将任务加入队列
job = queue.enqueue(say_hello, 'World')
Worker(工作者)
rq worker
3. Web 界面
rq-dashboard
4. 查看任务结果
任务状态
job.get_status() 来查看任务的当前状态,返回的状态值可以是以下之一:queued:任务已经加入队列,等待执行。 started:任务已经开始执行。 finished:任务执行完成。 failed:任务执行失败。
print(job.get_status()) # 输出任务的状态
任务结果
job.result 获取任务的结果。这里有一个小问题:任务结果默认是延迟加载的,也就是说,直到任务执行完成,你才能看到结果。print(job.result) # 输出任务的执行结果
job.result 会是 None,并且你可以通过 job.exc_info 获取详细的错误信息。5. RQ 与 Celery 的对比
RQ:简单易用
基于 Redis:RQ 只依赖 Redis,安装和配置都非常简单。它不需要像 Celery 那样配置各种后端(比如 RabbitMQ、Redis、数据库等)。 轻量级:RQ 适合小型项目和任务处理,不需要那么复杂的配置和管理。 易于上手:RQ 提供了简单的 API 和 Web 界面,非常适合快速开发和调试。
Celery:功能强大
高扩展性:Celery 支持多种消息中间件(比如 RabbitMQ、Redis、Amazon SQS 等),适合处理复杂的分布式任务。 任务调度:Celery 提供了非常强大的任务调度功能,可以定时执行任务或者周期性执行任务。 高度可定制:Celery 支持更复杂的功能,比如任务链、任务组、任务重试等。
总结
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。