我正在尝试制作一个温度监控模块,将当前温度连续保存到文件中,然后使用matplotlib绘制图形,无论它用于完成任何内容。我有这个功能,所以我可以使用它:
with TemperatureMonitoring():
# do stuff
当__enter__
被调用时,进程开始,这只是一个无限循环,它会休眠并写入文件,当__exit__
被调用时,进程终止,文件被绘制到屏幕。
现在我想进行改进,所以我想让子进程控制成为父进程;如果温度太高太久,它会暂停并等待电脑冷却。这是我第一次使用multiprocessing
模块,但似乎如果我暂停主进程,孩子也会暂停。因此,如果我达到临界状态,它将无法取消其自身。因此,父代必须能够在代码完成执行时终止子代,并且子代表必须能够在必要时暂停/恢复父代。是否有明显的方法来实现这一目标?
答案 0 :(得分:1)
最简单的方法是使用双工multiprocessing.Pipe
。然后,父母可以向孩子发送命令以关闭,孩子可以向父母发送关于温度水平的通知。
答案 1 :(得分:0)
使用共享内存是最快的IPC(进程间通信)。
您可以使用posix_ipc包来建立共享内存和信号量。共享内存将保持温度和信号量将让您使进程等待并继续。
当谈到终止进程时,我建议使用主循环中的条件执行该进程。这样你就可以关闭所有手柄了。