【问题标题】:Python Multiprocessing Queue on Parent Exit父出口上的 Python 多处理队列
【发布时间】:2012-02-23 12:06:45
【问题描述】:

我的问题的要点是当父级(在这种情况下为守护进程)被杀死时,多处理队列会发生什么。

我有一个后台运行的守护进程,它为子进程排队作业:

class manager(Daemon):
    def run(self):
        someQueue = MP.Queue()

        someChild = MP.Process(target=someCode, args=(someArgs))
        someChild.start()
        ...

如果经理被杀死(假设它没有尝试使用someQueue,因此如文档中所述将其损坏),是否有办法恢复队列中的数据?

我看到的两个理论解决方案是在退出此子进程之前清理someChild 中的someQueue。还转储队列以便我可以在经理退出时恢复队列的状态也可以解决我的问题。但是,在实施之前,最好能朝着正确的方向轻推。

谢谢,

【问题讨论】:

    标签: python queue multiprocessing


    【解决方案1】:

    听起来您想要持久/可靠的队列。我相信 multiprocessing.Queue 类是用管道实现的(就像你通过 popen() 调用得到的一样),所以数据是相对短暂的,你可能不得不做一些操作系统级别的技巧来获取内容。您可能会考虑编写自己的持久队列类,该类使用文件系统文件(假设您的操作系统和文件系统支持锁定)来存储队列内容。然后,您可以提供所有需要的分析工具来检查队列并恢复未处理的数据。

    【讨论】:

    • 我不明白这是如何回答这个问题的。 Multiprocessing 有一个 Pipe 和一个 Queue,因此人们会假设在这种情况下 pipe 和 Queue 的工作方式相似(只要在这两种情况下都避免 MP 文档中前面提到的损坏情况)。
    • 我有信心相信存在操作系统级别的技巧来获取这些队列的数据,但您没有提到任何尝试这样做的方法吗?我正在使用 python,所以为什么必须有一些模块可以帮助解决这些情况,为什么还要编写持久队列类。
    • (...) Queue() 建立在 Pipe() 之上。 - Python multiprocessing - Pipe vs Queue
    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多