我在一個典型的「pub/sub」設置中有一組長時間運行的進程用於通信隊列。Python多處理 - 看門狗進程?
我希望做兩件事情,我無法弄清楚如何既同時完成:
- 添加/刪除工人。例如,如果我看到我的待處理隊列大小變得太大,我希望能夠添加額外的使用者。
- 我的流程的看門狗 - 我希望得到通知,如果我的任何生產者或消費者崩潰。
我可以在隔離做(2):
try:
while True:
for process in workers + consumers:
if not process.is_alive():
logger.critical("%-8s%s died!", process.pid, process.name)
sleep(3)
except KeyboardInterrupt:
# Python propagates CTRL+C to all workers, no need to terminate them
logger.warn('Received CTR+C, shutting down')
上述塊,這防止了我這樣做(1)。
所以我決定將代碼移入自己的進程。
這不起作用,因爲process.is_alive()
只適用於父母檢查其子女的狀態。在這種情況下,我想檢查的過程將是兄弟姐妹而不是孩子。
我對如何繼續有點難住。我的主進程如何支持對子進程的更改,同時還監視子進程?
你不能直接做到這一點,至少不能用你可以稱之爲「有意義的可讀代碼」的方式。要管理它,您需要一個抽象級別,將作業分配給可以接收命令以向上/向下縮放的工作人員。坦率地說,編寫這個軟件是相當複雜的事情,並且有準備好的系統可以這樣做,看看芹菜。 – 2014-10-08 01:12:09
@Puciek我在其他項目上使用過芹菜。它服務於不同的用例(AFAIK) - 啓動異步作業。我從來沒有聽說過用它來管理長期生產者和消費者。 – knite 2014-10-08 01:15:25
您可以很好地使用它來啓動長時間運行的作業,包括使用者服務器 - 最後所有腳本的創建都是平等的,只要記得禁用超時即可。它配備了您似乎在尋找的自動縮放功能。 – 2014-10-08 01:17:23