2014-06-26 42 views
0

我有一个长期运行的进程运行使用python的多处理模拟。最后,进程通过管道将结果发送回主进程。Python多处理破损管道,​​访问命名空间

问题是,我已经重新定义了结果对象的类,所以我知道它会给我一个不可取的错误。为了解决这个问题,我得到了管道的文件描述符,并试图用os.fdopen打开它。不幸的是,我得到了一个“错误的文件描述符”错误,现在如果我尝试从管道接收,我会得到相同的结果。

因为这是一个非常长的模拟,我不想杀死这个过程并重新开始。有没有办法将对象从管道中取出,或者只是访问子进程的名称空间,以便将其保存到磁盘?

非常感谢。

+1

会更好,如果你发布一些你的虚拟代码片段 –

回答

0

multiprocessing工人转移unpicklable原始数据发回了一些建议:

1)每个工人写入到数据库或文件(或者打印到控制台)

2)转换将原始数据一个字符串,返回父级。如果父母只是记录事情,那么这是最简单的。

3)转换为JSON,返回父级。如果父母正在汇总数据,而不仅仅是记录数据,则此解决方案最为合适。

+0

我的主要问题是我无法检索当前数据。将来,我可以简单地将工作进程写入文件,但我不想丢失当前停留在子进程中的数据(需要很长时间才能获得)。 – sheridp

+0

你想修改正在运行的项目的代码,以便当前的数据可用?这是不可能的。 – johntellsall