python的分布式任務huey如何實現異步化任務講解_PHP教程
推薦:python的multiprocessing多進程通信的pipe和queue介紹python的multiprocessing提供了IPC(Pipe和Queue),使Python多進程并發,效率上更高。本文我們就來詳細介紹一下pipe和queue。 這兩天溫故了python的multiprocessing多進程模塊,看到的pipe和queue這兩種ipc方式,啥事ipc? ipc就是進程間的通信模式,常用的一半是socke,
本文我們來分享一個python的輕型的任務隊列程序,他可以讓python的分布式任務huey實現異步化任務,感興趣的朋友可以看看。
一個輕型的任務隊列,功能和相關的broker沒有celery強大,重在輕型,而且代碼讀起來也比較的簡單。
關于huey的介紹: (比celery輕型,比mrq、rq要好用 !)
a lightweight alternative.
written in python
no deps outside stdlib, except redis (or roll your own backend)
support for django
supports:
multi-threaded task execution
scheduled execution at a given time
periodic execution, like a crontab
retrying tasks that fail
task result storage
安裝:
關于huey的api,下面有詳細的介紹及參數介紹的。
juey作為woker的時候,一些cli參數。
常用的是:
-l 關于日志文件的執行 。
-w workers的數目,-w的數值大了,肯定是增加任務的處理能力
-p --periodic 啟動huey worker的時候,他會從tasks.py里面找到 需要crontab的任務,會派出幾個線程專門處理這些事情。
-n 不啟動關于crontab里面的預周期執行,只有你觸發的時候,才會執行周期星期的任務。
--threads 意思你懂的。
1
任務隊列huey 是靠著redis來實現queue的任務存儲,所以需要咱們提前先把redis-server和redis-py都裝好。 安裝的方法就不說了,自己搜搜吧。
我們首先創建下huey的鏈接實例 :
然后就是關于任務的,也就是你想讓誰到任務隊列這個圈子里面,和celey、rq,mrq一樣,都是用tasks.py表示的。
再來一個真正去執行的 。 main.py 相當于生產者,tasks.py相當于消費者的關系。 main.py負責喂數據。
和celery、rq一樣,他的結果獲取是需要在你的config.py或者主代碼里面指明他的存儲的方式,現在huey還僅僅是支持redis,但相對他的特點和體積,這已經很足夠了 !
只是那幾句話而已,導入RedisDataStore庫,申明下存儲的地址。
這個時候,我們在ipython再次去嘗試的時候,會發現可以獲取到tasks.py里面的return值了 其實你在main.py里面獲取的時候,他還是通過uuid從redis里面取出來的。
huey也是支持celey的延遲執行和crontab的功能 。 這些功能很是重要,可以自定義的優先級或者不用再借助linux本身的crontab。
用法很簡單,多加一個delay的時間就行了,看了下huey的源碼,他默認是立馬執行的。當然還是要看你的線程是否都是待執行的狀態了。
再來一個重試retry的介紹,huey也是有retry,這個很是實用的東西。 如果大家有看到我的上面文章關于celery重試機制的介紹,應該也能明白huey是個怎么個回事了。 是的,他其實也是在tasks里具體函數的前面做了裝飾器,裝飾器里面有個func try 異常重試的邏輯 。 大家懂的。
huey是給你反悔的機會餓 ~ 也就是說,你做了deley的計劃任務后,如果你又想取消,那好看,直接revoke就可以了。
task() - 透明的裝飾器,讓你的函數變得優美點。
periodic_task() - 這個是周期性的任務
crontab() - 啟動worker的時候,附帶的crontab的周期任務。
BaseQueue - 任務隊列
BaseDataStore - 任務執行后,可以把 結果塞入進去。 BAseDataStore可以自己重寫。
官方的huey的git庫里面是提供了相關的測試代碼的:
main.py
tasks.py
run.sh
咱們可以先clone下huey的代碼庫。 里面有個examples例子目錄,可以看到他是支持django的,但是這不是重點 !
分享:php列出mysql表所有行與列的方法這篇文章主要介紹了php列出mysql表所有行和列的方法,涉及php操作mysql數據庫的技巧,具有一定參考借鑒價值,需要的朋友可以參考下 本文實例講述了php列出mysql表所有行和列的方法。分享給大家供大家參考。具體實現方法如下: 代碼如下:html head titleSelecting Data/tit
- 相關鏈接:
- 教程說明:
PHP教程-python的分布式任務huey如何實現異步化任務講解。