pickle.pickling错误:无法pickle“_subprocess_handle”对象:<\u subprocess_handle object at 0x00aaaaaaaa>

2024-09-28 19:31:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图写一个test to compare methods for inter process communication in python,而OSX和windows给了我第一个示例的问题。它几乎是使用队列的手动示例。在

我用python2.7.9和3.4.1在linux上编写了所有代码。而且效果很好。在

#!/usr/bin/env python
import multiprocessing as MP
...
self.mpq_main = MP.Queue()
self.mpq_net = MP.Queue()
self.mpt_net = MP.Process( target=self.start_t_net, args=(self.mpq_main, self.mpq_net) )
...
def start_t_net(self, qin, qout):
    self.NET = gcbtestnet.GCBTestNET(qin, qout);

然后在osx和windows上进行测试时,我得到了错误。此问题适用于windows one:

^{pr2}$

如果试图将对象引用作为进程参数传递,则通常会出现该错误,但我只传递multiprocess.Queues个实例。在


Tags: totestself示例netqueuemainwindows
1条回答
网友
1楼 · 发布于 2024-09-28 19:31:15

我发现了我的(严重)错误。当我将进程从简单方法移到对象时,我忘记了将所述对象的初始化移动到.Process()调用,并将其保存在类方法中。由于某些原因,它在linux上工作,但在windows上不行。在

这是修正https://github.com/gcb/python_multiprocess_test/commit/8565384e5cc6cadf959c335b5db0693e646f6777的差异

-self.mpt_net = MP.Process( target=self.start_t_net, args=(self.mpq_main, self.mpq_net) )
+self.mpt_net = MP.Process( target=gcbtestnet.GCBTestNET, args=(self.mpq_main, self.mpq_net) )
...
-def start_t_net(self, qin, qout):
-    self.NET = gcbtestnet.GCBTestNET(qin, qout);

相关问题 更多 >