前言:
这里介绍一个python下,比celery更加简单的异步工具,真的是很简单,当然他的功能没有celery多,复杂程度也没有celery大,文档貌似也没有celery多,但是为啥会介绍rq这个东西 因为他够简单。
当然他虽然简单,但是也是需要中间人的,也就是 Broker,这里只能是redis了。 他没有celery支持的那么多,比如 redis rabbitmq mongodb mysql之类的。 说回来,咱们用rq,就是看重他的简单。
如对celery有兴趣,可以看看我以前写过的博文。
安装redis以及python-rq包,redis的话,直接yum就行,python rq需要pip来搞定。
先开始官方的demo:
这个是咱们要后端异步的模块:
创建队列
然后,直接rqworker !
一直往队列里面扔任务。
rqworker的接口任务并执行:
(下面的log已经说明了一切,任务确实执行了,而且我在ipython下,很是流畅,我不需要担心任务是否很好的执行,我只需要把任务一扔,就甩屁股走人了。)
紧接着咱们再跑一个我自己测试的模块,逻辑很简单在sleep情况下,是否会很好的执行,来测试他的异步任务执行。 当然你也可以rqworker执行的运行,下面的代码更像是event事件的感觉。
下面是自己需要异步执行的模块代码~
咱们在ipython测试下吧:
看到没有,本来咱们调用了一个函数是sleep5s,但他不影响其他的代码的堵塞,会扔到队列里面后,迅速的执行后面的代码。
如果我想像celery那样,查看结果的话,也是用result方法的。
但是有个缺点,任务是异步方式的放到了redis的队列里面了,但是后端的work貌似是单进程的。。。当然也很好改,用threading针对每个任务进行fork线程就可以了。
这个是worker.py打出来的日志:
这里在看下官方给的例子:
rq可以设置任务的优先级别的,比如一个low级别的。
好了先这么着吧,官方 还提供了很多实用的东西,比如装饰器啥的。
对了,官方提供了一个rq的管理平台页面。
地址是
本文出自 “” 博客,谢绝转载!