수 없습니다. 이유는 확실하지 않지만 어제 제가 작성한 일부 다중 처리 코드를 테스트하고 있었고 정상적으로 작동하고있었습니다. 내가 코드를 다시 검사 할 때 그리고 오늘, 그 날이 오류를 줄 것이다 :Python 3.2 Multiprocessing 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
다음과 같이 내 코드의 구조는 간다 :
을 나는,이 개 모듈이 A.py 말을하고 B.py. *
* A.py는 A라는 클래스에 정의되어 있습니다.
* B.py는 클래스 B를가집니다.
* 클래스 A에는 다중 처리 풀이 속성 중 하나입니다. 수영장은 A.__init__()
에 정의되어 있지만, 다른 방법에 사용되는 *
- 실행() A.run()
에서
* 내가 (objBList라는 목록에서 수집) 클래스 B의 일부 개체의 일부 속성을 설정 한 다음 내가 pool.map(processB, objBList)
를 사용
* processB()는 유일한 매개 변수 (B의 인스턴스)로 수신하고 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의 : BTW
class B:
def runInputs(self):
do_something()
, 나는 때문에 멀티 프로세싱 방식의 processB() 모듈의 기능을 사용하도록 강요하고 있습니다 Windows의 경우에서 작동합니다.
또한 오류가 발생했습니다. 그 풀을 절대로 뺄 수는 없습니다. 자식 프로세스를 보내지 않으려 고하면서 코드의 일부를 참조하지 말아야합니다. 풀 개체.
아이디어가 있으십니까?
(PS : 나는 또한 내가 컴퓨터가 예기치 않게 다시 시작이 기능을 테스트 한 이틀 사이에 그에서 언급해야한다 - 아마도 윈도우 업데이트를 설치 한 후.)
문제를 나타내는 실행 가능한 예제를 게시하십시오. –