Python多进程破碎管道,访问命名空间
我有一个长时间运行的程序,它用Python的多进程功能在做模拟。最后,这个程序通过一个管道把结果发送回主程序。
问题是,我重新定义了结果对象的类,所以我知道会出现反序列化错误。为了避免这个问题,我获取了管道的文件描述符,并尝试用os.fdopen打开它。可惜,我遇到了“坏文件描述符”的错误,现在如果我尝试从管道接收数据,也会出现同样的错误。
因为这个模拟过程非常长,我不想杀掉这个进程然后重新开始。有没有办法从管道中取出对象,或者直接访问子进程的命名空间,以便我可以把它保存到磁盘上?
非常感谢。
1 个回答
0
这里有一些建议,关于如何把无法被“pickle”的原始数据从 multiprocessing
工作进程中传回去:
1) 让每个工作进程把数据写入数据库或文件(或者直接打印到控制台)
2) 把原始数据转换成字符串,然后返回给父进程。如果父进程只是记录一些信息,这种方法是最简单的。
3) 把数据转换成 JSON 格式,再返回给父进程。如果父进程是用来汇总数据,而不仅仅是记录,那这个方法是最好的。