MultiWorkerPHP 多進(jìn)程管理器
MultiWorker PHP多進(jìn)程管理器
Multiworker是純PHP實(shí)現(xiàn)的多進(jìn)程管理器,使用master-worker進(jìn)程模型,適用于命令行下的多進(jìn)程調(diào)度、并發(fā)處理、工作進(jìn)程崩潰自動(dòng)恢復(fù)、單實(shí)例限制。
項(xiàng)目主頁(yè) https://github.com/beyosoft/multiworker
bug及使用反饋:[email protected]
一、特點(diǎn):
使用master-worker進(jìn)程模型,穩(wěn)定可靠。 Multiworker運(yùn)行實(shí)例由一個(gè)master進(jìn)程(稱為主進(jìn)程)、多個(gè)Worker進(jìn)程(稱為工作進(jìn)程或子進(jìn)程)組成,主進(jìn)程主要工作進(jìn)程的生成、和退出狀態(tài)監(jiān)測(cè)。一旦有工作進(jìn)程異常退出,主進(jìn)程就會(huì)立即再生成一個(gè)工作進(jìn)程,接替其繼續(xù)工作。因?yàn)橹鬟M(jìn)程不參與具體業(yè)務(wù)邏輯,幾乎沒(méi)有異常退出的可能。
輕量級(jí)、無(wú)外部依賴。只有一個(gè)類文件、可適用用于任何項(xiàng)目和框架。
支持單實(shí)例功能,配合crontab可實(shí)現(xiàn)高可靠性的后臺(tái)任務(wù)。 實(shí)際業(yè)務(wù)中,我們往往希望一個(gè)任務(wù)由單實(shí)例運(yùn)行,只有前一個(gè)實(shí)例異常退出時(shí),新的實(shí)例才能成功運(yùn)行,結(jié)合crontab和Multiworker的單實(shí)例功能,可以很容易實(shí)現(xiàn)一個(gè)高可靠的后臺(tái)任務(wù)。
并發(fā)任務(wù)調(diào)度處理。不同的工作進(jìn)程可負(fù)責(zé)不同的任務(wù)處理,相比單進(jìn)程可極大提高整體任務(wù)處理效率。
工作進(jìn)程狀態(tài)監(jiān)測(cè)。當(dāng)工作進(jìn)程以指定的正常狀態(tài)退出后,主進(jìn)程不會(huì)再生產(chǎn)新的子進(jìn)程,當(dāng)所有工作進(jìn)程以指定的正常狀態(tài)退出時(shí),主進(jìn)程認(rèn)為任務(wù)處理完畢,自己同時(shí)退出。
信號(hào)控制和進(jìn)程運(yùn)行控制。實(shí)例在運(yùn)行中,向主進(jìn)程發(fā)送SIGTERM信號(hào)時(shí),主進(jìn)程會(huì)向每個(gè)子進(jìn)程發(fā)送信號(hào),告知其及時(shí)退出,當(dāng)所有工作進(jìn)程退出后,主進(jìn)程也退出。
二、環(huán)境要求
因?yàn)槭褂肔inux信號(hào)控制,需要posix擴(kuò)展,只支持Linux類系統(tǒng),不支持windows。
需要php 5.3+。
三、注意事項(xiàng)
-
工作進(jìn)程可以共用一個(gè)數(shù)據(jù)庫(kù)連接資源嗎?
絕對(duì)不能,每個(gè)工作進(jìn)程必須重新建立一個(gè)數(shù)據(jù)庫(kù)連接,否則會(huì)引發(fā)不可意料的結(jié)果??梢栽趏nWorkerStart回調(diào)中關(guān)閉主進(jìn)程已經(jīng)建立的數(shù)據(jù)庫(kù)連接,再重新打開即可。
-
如何實(shí)現(xiàn)不同的工作進(jìn)程執(zhí)行不同的任務(wù)?
onWorkerStart回調(diào)的參數(shù),就是進(jìn)程的PIN(process index number), 它從0開始編號(hào),可以通過(guò)判斷PIN從而讓子進(jìn)程完成不同的任務(wù)。
-
可靠性如何?
久經(jīng)生產(chǎn)環(huán)境實(shí)際長(zhǎng)久運(yùn)行,請(qǐng)放心使用。
