多处理全局变量更新未返回父进程
当利用多处理建立辅助进程时,会创建一个具有自己的不同的 Python 实例全局状态。这种全局状态是隔离的,使得子进程对全局变量所做的任何修改对父进程都是不可见的。
此外,大多数多处理抽象都利用 pickle 来传输数据。通过代理传送的所有数据都必须是可pickle的,包括管理器提供的所有对象。管理器部分强调其他进程可以使用代理访问共享对象。
类似的限制也适用于队列,尽管文档省略了此信息。快速测试确认队列中的所有数据也必须是可pickle的。
如果pickle您的数据仍然不可行,请考虑将其存储为ctype对象并将内存引用传递给子进程。这种方法有一定风险,应该保留在其他选项都用尽的情况下。
就您而言,了解 LORR 的复杂性至关重要。如果它是一个 Python 类,则从其子类化并定义 setstate 和 getstate 方法可能会有助于 pickling。
或者,从 LORR 实例中提取所需的数据并将其传递通过一个简单的字符串就足够了。考虑利用队列在主进程和子进程之间发送消息,以直接调用对象方法,如上图所示。
以上是如何在多处理中更新子进程的全局变量并确保父进程可以访问它们?的详细内容。更多信息请关注PHP中文网其他相关文章!