python的分布式任務(wù)huey如何實(shí)現(xiàn)異步化任務(wù)講解_PHP教程
推薦:python的multiprocessing多進(jìn)程通信的pipe和queue介紹python的multiprocessing提供了IPC(Pipe和Queue),使Python多進(jìn)程并發(fā),效率上更高。本文我們就來(lái)詳細(xì)介紹一下pipe和queue。 這兩天溫故了python的multiprocessing多進(jìn)程模塊,看到的pipe和queue這兩種ipc方式,啥事ipc? ipc就是進(jìn)程間的通信模式,常用的一半是socke,
本文我們來(lái)分享一個(gè)python的輕型的任務(wù)隊(duì)列程序,他可以讓python的分布式任務(wù)huey實(shí)現(xiàn)異步化任務(wù),感興趣的朋友可以看看。
一個(gè)輕型的任務(wù)隊(duì)列,功能和相關(guān)的broker沒(méi)有celery強(qiáng)大,重在輕型,而且代碼讀起來(lái)也比較的簡(jiǎn)單。
關(guān)于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
安裝:
關(guān)于huey的api,下面有詳細(xì)的介紹及參數(shù)介紹的。
juey作為woker的時(shí)候,一些cli參數(shù)。
常用的是:
-l 關(guān)于日志文件的執(zhí)行 。
-w workers的數(shù)目,-w的數(shù)值大了,肯定是增加任務(wù)的處理能力
-p --periodic 啟動(dòng)huey worker的時(shí)候,他會(huì)從tasks.py里面找到 需要crontab的任務(wù),會(huì)派出幾個(gè)線(xiàn)程專(zhuān)門(mén)處理這些事情。
-n 不啟動(dòng)關(guān)于crontab里面的預(yù)周期執(zhí)行,只有你觸發(fā)的時(shí)候,才會(huì)執(zhí)行周期星期的任務(wù)。
--threads 意思你懂的。
1
任務(wù)隊(duì)列huey 是靠著redis來(lái)實(shí)現(xiàn)queue的任務(wù)存儲(chǔ),所以需要咱們提前先把redis-server和redis-py都裝好。 安裝的方法就不說(shuō)了,自己搜搜吧。
我們首先創(chuàng)建下huey的鏈接實(shí)例 :
然后就是關(guān)于任務(wù)的,也就是你想讓誰(shuí)到任務(wù)隊(duì)列這個(gè)圈子里面,和celey、rq,mrq一樣,都是用tasks.py表示的。
再來(lái)一個(gè)真正去執(zhí)行的 。 main.py 相當(dāng)于生產(chǎn)者,tasks.py相當(dāng)于消費(fèi)者的關(guān)系。 main.py負(fù)責(zé)喂數(shù)據(jù)。
和celery、rq一樣,他的結(jié)果獲取是需要在你的config.py或者主代碼里面指明他的存儲(chǔ)的方式,現(xiàn)在huey還僅僅是支持redis,但相對(duì)他的特點(diǎn)和體積,這已經(jīng)很足夠了 !
只是那幾句話(huà)而已,導(dǎo)入RedisDataStore庫(kù),申明下存儲(chǔ)的地址。
這個(gè)時(shí)候,我們?cè)趇python再次去嘗試的時(shí)候,會(huì)發(fā)現(xiàn)可以獲取到tasks.py里面的return值了 其實(shí)你在main.py里面獲取的時(shí)候,他還是通過(guò)uuid從redis里面取出來(lái)的。
huey也是支持celey的延遲執(zhí)行和crontab的功能 。 這些功能很是重要,可以自定義的優(yōu)先級(jí)或者不用再借助linux本身的crontab。
用法很簡(jiǎn)單,多加一個(gè)delay的時(shí)間就行了,看了下huey的源碼,他默認(rèn)是立馬執(zhí)行的。當(dāng)然還是要看你的線(xiàn)程是否都是待執(zhí)行的狀態(tài)了。

再來(lái)一個(gè)重試retry的介紹,huey也是有retry,這個(gè)很是實(shí)用的東西。 如果大家有看到我的上面文章關(guān)于celery重試機(jī)制的介紹,應(yīng)該也能明白huey是個(gè)怎么個(gè)回事了。 是的,他其實(shí)也是在tasks里具體函數(shù)的前面做了裝飾器,裝飾器里面有個(gè)func try 異常重試的邏輯 。 大家懂的。

huey是給你反悔的機(jī)會(huì)餓 ~ 也就是說(shuō),你做了deley的計(jì)劃任務(wù)后,如果你又想取消,那好看,直接revoke就可以了。
task() - 透明的裝飾器,讓你的函數(shù)變得優(yōu)美點(diǎn)。
periodic_task() - 這個(gè)是周期性的任務(wù)
crontab() - 啟動(dòng)worker的時(shí)候,附帶的crontab的周期任務(wù)。
BaseQueue - 任務(wù)隊(duì)列
BaseDataStore - 任務(wù)執(zhí)行后,可以把 結(jié)果塞入進(jìn)去。 BAseDataStore可以自己重寫(xiě)。
官方的huey的git庫(kù)里面是提供了相關(guān)的測(cè)試代碼的:
main.py
tasks.py
run.sh
咱們可以先clone下huey的代碼庫(kù)。 里面有個(gè)examples例子目錄,可以看到他是支持django的,但是這不是重點(diǎn) !

分享:php列出mysql表所有行與列的方法這篇文章主要介紹了php列出mysql表所有行和列的方法,涉及php操作mysql數(shù)據(jù)庫(kù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下 本文實(shí)例講述了php列出mysql表所有行和列的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下: 代碼如下:html head titleSelecting Data/tit
- python的multiprocessing多進(jìn)程通信的pipe和queue介紹
- php列出mysql表所有行與列的方法
- PHP使用DirectoryIterator顯示下拉文件列表的方法
- PHP 驗(yàn)證登陸類(lèi)分享
- php檢索或者復(fù)制遠(yuǎn)程文件的方法
- php通過(guò)文件流方式復(fù)制文件的方法
- php通過(guò)遞歸方式復(fù)制目錄和子目錄的方法
- php不使用copy()函數(shù)復(fù)制文件的方法
- php相對(duì)當(dāng)前文件include其它文件的方法
- php從完整文件路徑中分離文件目錄和文件名的方法
- PHP開(kāi)發(fā)框架laravel安裝與配置教程
- php獲得文件大小和文件創(chuàng)建時(shí)間的方法
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- 怎樣用PHP程序計(jì)算時(shí)間差
- 解答網(wǎng)頁(yè)中PHP腳本中include文件報(bào)錯(cuò)的方法
- PHP技巧:PHP腳本編程中的文件系統(tǒng)函數(shù)庫(kù)
- PHP實(shí)現(xiàn)指定字段的多維數(shù)組排序函數(shù)分享
- 詳細(xì)解析 PHP 向 MySQL 發(fā)送數(shù)據(jù)過(guò)程
- PHP教程之入門(mén)需要掌握的幾種功能代碼
- PHP flush()與ob_flush()的區(qū)別詳解
- PHP使用DirectoryIterator顯示下拉文件列表的方法
- PHP多個(gè)接口同個(gè)方法
- 記錄mysql性能查詢(xún)過(guò)程的使用方法
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索python的分布式任務(wù)huey如何實(shí)現(xiàn)異步化任務(wù)講解
- 教程說(shuō)明:
PHP教程-python的分布式任務(wù)huey如何實(shí)現(xiàn)異步化任務(wù)講解
。