前言:
這裡介紹一個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的管理平台頁面。
位址是
本文出自 “” 部落格,謝絕轉載!