Python3.2多处理NotImplementedError:池对象不能

2024-10-03 15:31:06 发布

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

我不知道为什么,但是昨天我在测试我写的一些多处理代码,它运行得很好。今天我再次检查代码时,会出现以下错误:

Exception in thread Thread-5:
Traceback (most recent call last):
  File "C:\Python32\lib hreading.py", line 740, in _bootstrap_inner
    self.run()
  File "C:\Python32\lib hreading.py", line 693, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Python32\lib\multiprocessing\pool.py", line 342, in _handle_tasks
    put(task)
  File "C:\Python32\lib\multiprocessing\pool.py", line 439, in __reduce__
    'pool objects cannot be passed between processes or pickled'
NotImplementedError: pool objects cannot be passed between processes or pickled

我的代码结构如下:
*我有两个模块,比如A.py和B.py。
*py中定义了名为A的类。
*B.py同样具有B类。
*在A级中,我有一个多处理池作为属性之一。
*池在A.__init__()中定义,但在另一个方法-run()中使用
*在A.run()中,我设置了类B的一些对象的一些属性(这些属性收集在名为objBList的列表中),然后使用pool.map(processB, objBList)
*processB()是一个模块函数(在a.py中),它作为唯一的参数(B的实例)接收并调用B.runInput()
*错误发生在池.map()行。在

基本上在A.py中:

^{pr2}$

在B.py中:

class B:
   def runInputs(self):
       do_something()

顺便说一句,我被迫使用processB()模块函数,因为在Windows上多处理的工作方式。在

另外,我想指出的是,我得到的错误-池不能被pickle-不应该引用我的代码的任何部分,因为我没有试图向子进程发送任何池对象。在

有什么想法吗?在

(注:我还应该提到,在我测试这个功能的两天之间,计算机意外地重新启动了——可能是在安装了windows更新之后。)


Tags: 模块run代码inpyself属性lib