2011-01-28 35 views
4

我想創建一些工作進程,如果他們由於異常而崩潰,我希望他們重生。除了多處理模塊中的is_alive方法之外,我似乎無法找到這樣做的方法。Python多重處理重生崩潰進程

這將需要我遍歷所有正在運行的進程(睡眠之後)並檢查它們是否還活着。這本質上是一個繁忙的循環,我想知道是否有更好的解決方案能夠在我的任何一個工作進程崩潰的情況下喚醒我的程序。一旦醒來,我想記錄下我的程序崩潰並啓動另一個進程的異常。

回答

2

輪詢以查看子進程是否還活着,應該可以正常工作,因爲它是一個開銷較低的檢查,不需要經常檢查。

首先回答這個(類似的)問題有一個Python代碼示例:Multi-server monitor/auto restarter in python

1

你可以用你的工作進程中的try/except塊,其中,除了提高前推一個消息到管道。當然,輪詢並不比這更糟,而且更簡單。

1

如果您使用的是類似unix的系統,則可以通過安裝signal handler來通知您的主程序已死的兒童。請在signal()上查找操作系統的文檔,尤其是SIGCHLD。恐怕我不記得Windows是否因其非常有限的POSIX信號支持而覆蓋了SIGCHLD。