4

我正在尝试制作一个温度监控模块,它将当前温度连续保存到一个文件中,然后使用 matplotlib 绘制一个图表,一旦它用于完成它。我已经让这个功能正常工作,所以我可以像这样使用它:

with TemperatureMonitoring():
    # do stuff

__enter__被调用时,进程开始,这只是一个无限循环,休眠并写入文件,当__exit__被调用时,进程终止并将文件绘制到屏幕上。

现在我想进行改进,所以我想让子进程控制父进程;如果温度太高太久,它将暂停并等待计算机冷却。这是我第一次使用该multiprocessing模块,但似乎如果我暂停主进程,孩子也会暂停。因此,如果我确实达到了临界状态,它将无法自行取消暂停。因此,父级需要能够在代码完成执行时终止子级,并且子级需要能够在必要时暂停/恢复父级。有没有明显的方法可以做到这一点?

4

2 回答 2

1

最干净的方法是使用双工multiprocessing.Pipe。然后父母可以向孩子发送命令以关闭,孩子可以向父母发送有关温度水平的通知。

于 2013-07-26T02:42:29.977 回答
0

使用共享内存是最快的 IPC(进程间通信)。

您可以使用 posix_ipc 包来建立共享内存和信号量。共享内存会保持温度,信号量会让你让进程等待并继续。

当谈到终止一个进程时,我建议在主循环中使用一个条件来执行它。这样您就可以关闭所有句柄。

于 2013-07-26T03:32:10.293 回答