我不知道爲什麼,但昨天我測試了一些我編寫的多處理代碼,它工作正常。那麼今天,當我再次檢查代碼,它會給我這個錯誤:Python 3.2多處理NotImplementedError:池對象不能是
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
我的代碼的結構去如下:
*我有2個模塊,說A.py和B.py.
* A.py在其中定義了類A.
* B.py類似地具有類B.
*在類A中,我有一個多處理池作爲屬性之一。
*池處於A.__init__()
定義的,但在另一種方法中使用 - 運行()
*在A.run()
我設置B類的一些對象(其被收集在一個稱爲objBList列表)的一些屬性,然後我使用pool.map(processB, objBList)
* processB()是作爲唯一參數(B的一個實例)接收的模塊函數(以A.py表示),並且調用B.runInput()
*錯誤發生在pool.map()行。
基本上A.py:
class A:
def __init__(self):
self.pool = multiprocessing.Pool(7)
def run(self):
for b in objBList:
b.inputs = something
result = self.pool.map(processB, objBList)
return list(result)
def processB(objB):
objB.runInputs()
和B.py:
class B:
def runInputs(self):
do_something()
順便說一句,我被迫使用的,因爲多處理方式的進程B()模塊功能在Windows上運行。
此外,我想指出的是,我得到的錯誤 - 這池不能醃製 - 不應該指的是我的代碼的任何部分,因爲我不想送孩子處理任何池對象。
任何想法?
(PS:我還要提到的是,在這兩天,我正在測試此功能的計算機重新啓動意外之間 - 在安裝Windows更新後可能)
請發佈一個演示問題的可運行示例。 –