MRQ:一个 Python 的分布式 worker 任务队列,使用 Redis 和 gevent

 ,  ,  , 

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-18-%e4%b8%8a%e5%8d%8810-17-38

%e5%b1%8f%e5%b9%95%e5%bf%ab%e7%85%a7-2016-10-18-%e4%b8%8a%e5%8d%8810-18-23

简介

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

主要特点

  • 代码简单:最初从Celery转向RQ是因为Celery的代码异常的复杂和费解。MRQ和RQ一样容易理解并且更容易扩展。
  • 强大的用户面板:具有可视界面可以控制一切,队列中的任务、当前任务、worker的状态等等。
  • 按任务区分的日志:可以在面板中单独获得每个任务的输出日志。
  • Gevent worker:IO密集型任务可以以最大的吞吐量并行的在同一个Unix进程中执行。
  • 管理集成:CPU密集型的任务可以利用一个命令完成将任务分解到多个Unix进程中处理的功能。
  • 任务管理:你可以利用代码或者用户面板重试、重新入队和取消任务等。
  • 性能:支持大批量的任务队列兼备更好的任务视图。
  • 容易配置:MRQ的每个参数都可以通过命令行参数或者配置文件进行配置。
  • 任务路由:和Celery一样,任务可以有默认的队列、过期时间和ttl值。
  • 内置的调度器:可以按照时间间隔和时间点对任务进行调度。
  • 策略:支持串行或者并行的处理队列、同时也支持一次性或者周期性的批量任务。
  • 子队列:简单的命令行来生成多个子队列,从worker的角度使用自动发现的方式。
  • 完备的测试体系:边界情况比如worker中断、Redis失败等都在一个docker容器中被测试过。
  • 线程跟踪:可以调试查看每个CPU敏感的任务在每个线程消耗的时间。
  • 完备的内存泄露调试器:监视任务的内存泄露并且使用objgraph发现内存泄露。

面板截图

687474703a2f2f692e696d6775722e636f6d2f7861586d7276582e706e67

687474703a2f2f692e696d6775722e636f6d2f7959554d43626d2e706e67

安装

  • 确定已经安装了Redis和MongoDB
  • 使用pip install mrq安装MRQ
  • 启动mongo服务:mongod &
  • 启动redis服务:redis-server &

开始

创建一个新目录并且写一个简单的任务文件如task.py:

同步执行:使用命令行执行,mrq-run

异步执行:使用不同的参数执行同样的任务3次

可以看到它不是立即执行任务并且返回,而是将任务添加到队列中命名为fetches并且打印它们的ID。

此时可以通过MRQ面板:mrq-dashboard &,然后在localhost:5555上看到新创建的队列和任务。

任务已经准备好,接下来使用mrq-worker进行启动,并且可以在面板中看到任务被并行的执行。

使用Ctrl-C可以终止worker。

协议

遵循MIT License。

官方网站:http://mrq.readthedocs.io/en/latest/
开源地址:https://github.com/pricingassistant/mrq

1 2 收藏

资源整理者简介:beyondwu

简介还没来得及写 :) 个人主页 · 贡献了14个资源 · 1


直接登录

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1440 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer