我的问题的要点是当父(这种情况下的守护进程)被杀死时多处理队列会发生什么。
我有一个后台运行的守护进程,它为子进程排队作业:
class manager(Daemon):
def run(self):
someQueue = MP.Queue()
someChild = MP.Process(target=someCode, args=(someArgs))
someChild.start()
...
如果管理员被杀(假设它没有尝试使用someQueue
并因此如文档中所述损坏它),那么无论如何都要恢复队列中的数据吗?
我看到的两个理论解决方案是在退出此子进程之前清除someQueue
中的someChild
。同时转储队列以便我可以在管理器退出时恢复队列状态也可以解决我的问题。但是,在实施之前,最好还是朝着正确的方向轻推。
谢谢,
答案 0 :(得分:1)
听起来你想要持久/可靠的排队。我相信multiprocessing.Queue类是用管道实现的(就像你使用popen()调用一样),所以数据是相对短暂的,你可能不得不做一些操作系统级别的技巧来获取内容。您可能会考虑编写自己的持久队列类,该类使用文件系统文件(假设您的操作系统和文件系统支持锁定)来存储队列内容。然后,您可以提供所需的所有分析工具来检查队列并恢复未处理的数据。