工作线程的python多处理状态 我有一个Python接口类,它是一个大的C++库,它对我来说有很大的作用(有大量的数据)。我可以通过发送一个信号来优雅地停止工作程序,即os.kill(pid,signal.SIGINT)。 因此,我认为我应该能够在p=Process(target=worker.run())中运行worker,这是可行的,然后在任意时间通过发送信号中断worker,这是可行的,但是:

工作线程的python多处理状态 我有一个Python接口类,它是一个大的C++库,它对我来说有很大的作用(有大量的数据)。我可以通过发送一个信号来优雅地停止工作程序,即os.kill(pid,signal.SIGINT)。 因此,我认为我应该能够在p=Process(target=worker.run())中运行worker,这是可行的,然后在任意时间通过发送信号中断worker,这是可行的,但是:,python,backgroundworker,state,multiprocessing,Python,Backgroundworker,State,Multiprocessing,我无法恢复工人的状态!导出了几个函数,这些函数应该会告诉我工作人员正在做什么,但是(显然在调用p.join())之后),所有这些函数返回的都是初始值。为什么?(工人实际上完成了他的工作,我可以在创建的输出文件中看到,但我没有在那里获得我在工作期间想要的信息…) 从多处理中使用队列或管理器似乎不是一个选项,因为对象不是真正的“可pickle”,如果我只需要worker中特定变量的状态,我也不想复制所有内容。(我一点也不确定我是否牢牢掌握了这个可腌制的概念……) 提前感谢您的建议 在多处理中,工作进

我无法恢复工人的状态!导出了几个函数,这些函数应该会告诉我工作人员正在做什么,但是(显然在调用
p.join()
)之后),所有这些函数返回的都是初始值。为什么?(工人实际上完成了他的工作,我可以在创建的输出文件中看到,但我没有在那里获得我在工作期间想要的信息…)

从多处理中使用队列或管理器似乎不是一个选项,因为对象不是真正的“可pickle”,如果我只需要worker中特定变量的状态,我也不想复制所有内容。(我一点也不确定我是否牢牢掌握了这个可腌制的概念……)


提前感谢您的建议

多处理
中,工作进程作为单独的进程运行。每个进程都有自己的地址(内存)空间


这意味着,如果工作进程更改了一个变量,父进程将看不到该更改,除非。

正如aix的回答所示,这听起来像是将多处理与线程行为混淆了。子进程需要以某种方式将状态传回父进程。如果您希望返回的状态是一种基本数据类型,那么就pickle能力而言,您不必担心太多()是的,谢谢,我想我终于理解了这一点。出于某种原因,我认为再次“连接”两个进程将神奇地从连接的地址空间检索对象事实上,我觉得“join”这个名字很不幸,因为没有真正的连接,父母似乎只是等待孩子的终止。