2013-07-26 70 views
4

我試圖做一個溫度監視模塊,它將當前溫度連續保存到一個文件中,然後使用matplotlib繪製一個圖形,無論它用於完成。我有這個功能的工作,這樣我就可以使用它像:Python:可以讓一個子進程暫停/恢復父進程

with TemperatureMonitoring(): 
    # do stuff 

__enter__被調用的過程中得到啓動,這僅僅是一個無限循環,睡覺和寫入文件,而當__exit__被調用該過程終止並且文件被繪製到屏幕上。

現在我想進行改進,所以我想讓子進程控制父進程;如果溫度太高太高,它會暫停並等待電腦冷卻。這是我第一次使用multiprocessing模塊,但是如果我暫停主進程,孩子也會暫停。所以如果我確實達到了一個臨界狀態,它將不能夠自行解封。因此,父代需要能夠在代碼完成執行時終止子代,並且必要時,子代需要能夠暫停/恢復父代。有沒有一種明顯的方法來實現這一點?

回答

1

最乾淨的方法是使用雙面打印multiprocessing.Pipe。然後家長可以發送命令給孩子關機,孩子可以向父母發送關於溫度水平的通知。

0

使用共享內存是最快的IPC(進程間通信)。

您可以使用posix_ipc軟件包來建立共享內存和信號量。共享內存將保持溫度和信號量,使您可以等待並繼續進程。

當談到終止一個過程,我建議在主循環中使用一個條件來執行該過程。以便您可以關閉所有手柄。