天天看點

在python下比celery更加簡單的異步任務隊列RQ

前言:

   這裡介紹一個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的管理平台頁面。

位址是

本文出自 “” 部落格,謝絕轉載!