MRQ - 分布式 worker 任务队列


MIT
跨平台
Python

软件简介

MRQ(MR.Queue)是一个使用 Redis&gevent 的分布式 worker 任务队列。

MRQ 是一个独特的任务队列,它一方面旨在像 RQ 一样简单,另一方面要求有接近
Celery 的性能。MRQ最早在 Pricing Assistant
上被开发,它最初的功能设计是为了满足任务队列的各种任务需求(IO密集&CPU密集,很多小任务&几个大任务)。

特性

  • 代码简单:MRQ 和 RQ 一样容易理解并且更容易扩展。

  • 强大的用户面板:具有可视界面,可以控制一切,包括队列中的任务、当前任务、worker 的状态等等。

  • 按任务区分的日志:在面板中单独获得每个任务的输出日志。

  • Gevent worker:IO 密集型任务可以并行在同一个 Unix 进程中执行,以实现最大吞吐量。

  • 管理集成:CPU 密集型的任务可以通过单个命令行参数在多个 UNIX 进程之间拆分。

  • 任务管理:可以利用代码或者用户面板重试、重新入队和取消任务等。

  • 性能:批量作业排队,轻松作业分析。

  • 容易配置:MRQ 的每个参数都可以通过命令行参数或者配置文件进行配置。

  • 任务路由:和 Celery 一样,任务可以有默认的队列、过期时间和 ttl 值。

  • 内置的调度器:可以按照时间间隔和时间点对任务进行调度。

  • 策略:支持串行或者并行的处理队列,同时也支持一次性或者周期性的批量任务。

  • 子队列:简单的命令行来生成多个子队列,从 worker 的角度使用自动发现的方式。

  • 完备的测试体系:边界情况比如 worker 中断、Redis 失败等都在一个 docker 容器中测试。

  • 线程跟踪:可以调试查看每个 CPU 敏感的任务在每个线程消耗的时间。

  • 完备的内存泄露调试器:监视任务的内存泄露并且使用 objgraph 发现内存泄露。