前言:

   这里介绍一个python下,比celery更加简单的异步工具,真的是很简单,当然他的功能没有celery多,复杂程度也没有celery大,文档貌似也没有celery多,但是为啥会介绍rq这个东西 因为他够简单。


当然他虽然简单,但是也是需要中间人的,也就是 Broker,这里只能是redis了。 他没有celery支持的那么多,比如 redis rabbitmq mongodb mysql之类的。 说回来,咱们用rq,就是看重他的简单。

Hello , 本文的原文地址,blog.xiaorui.cc

安装redis以及python-rq包,redis的话,直接yum就行,python rq需要pip来搞定。

先开始官方的demo:

这个是咱们要后端异步的模块:

创建RQ队列对象

然后,直接rqworker !

一直往队列里面扔任务。

rqworker的接口任务并执行:

(下面的log已经说明了一切,任务确实执行了,而且我在ipython下,很是流畅,我不需要担心任务是否很好的执行,我只需要把任务一扔,就甩屁股走人了。)

紧接着咱们再跑一个我自己测试的模块,逻辑很简单在sleep情况下,是否会很好的执行,来测试他的异步任务执行。 当然你也可以rqworker执行的运行,下面的代码更像是event事件的感觉。

下面是自己需要异步执行的模块代码~

咱们在ipython测试下吧:

看到没有,本来咱们调用了一个函数是sleep5s,但他不影响其他的代码的堵塞,会扔到队列里面后,迅速的执行后面的代码。


如果我想像celery那样,查看结果的话,也是用result方法的。

但是有个缺点,任务是异步方式的放到了redis的队列里面了,但是后端的work貌似是单进程的。。。当然也很好改,用threading针对每个任务进行fork线程就可以了。

这个是worker.py打出来的日志:

这里在看下官方给的例子:

好了先这么着吧,官方 http://python-rq.org/docs/  还提供了很多实用的东西,比如装饰器啥的。

如果被爬虫转载到别的页面,请回来看看这篇博客的更新,博客的原文,blog.xiaorui.cc

对了,官方提供了一个rq的管理平台页面。

地址是 https://github.com/nvie/rq-dashboard

RQ还是不错的,代码也容易看懂。 

我这里再推荐一个python的任务队列huey   http://xiaorui.cc/?p=222 ,关于python的任务队列,我的排名是 celery > huey > rq     这里的排名更多的是这三个服务本身的复杂性。   如果你的逻辑够简单和鲜明,那么推荐你用RQ 



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

使用python的分布式任务队列huey实现任务的异步化

前言:     一个轻型的任务队列,功能和相关的broker没有celery强大,重在轻型,而且代码读起来也比较的简单。  这次算是原...

阅读全文

6则回应给“基于redis又比celery更加简单的异步任务队列RQ”

  1. zqj说道:

    ‘module’ object has no attribute ‘fork’ 怎么一入队列就这样了

  2. Adrian说道:

    具体请看:https://github.com/whtsky/WeRoBot/issues/83

  3. Adrian说道:

    谢谢楼主的post,都很精彩。遇到一个难题,一个python的框架werobot,是个WSGI的App,根据前两个范例在里面包装了rq,可是不起作用。请问这个该怎么解决呢?

  4. duma说道:

    谢谢,已经看到了。另外博主的文章都很不错,道出了不少python方面的好料。

  5. duma说道:

    博主有试过 python 的 huey 吗?

发表评论