기계 학습자를 양성하기 위해 다중 처리 풀을 사용하고 있습니다.SystemError : NULL result 다중 처리 Python
각 LearnerRun 객체는 학습자, 하이퍼 매개 변수 사전, 이름, 다른 옵션 사전의 몇 가지 옵션, 결과를 작성할 디렉토리 이름, 훈련 할 예제 세트 ID (슬라이스 또는 numpy 배열) 및 테스트 할 예제 ID 집합 (슬라이스 또는 numpy 배열)이 포함됩니다. 중요하게도, 훈련 및 테스트 데이터는 아직 읽혀지지 않습니다. ID 집합은 상대적으로 작고 나중에 함수의 데이터베이스 읽기 동작을 지시합니다.
이전에는 문제가 없었던 self.pool.apply_async(learner_run.run)
으로 전화합니다. 이제 풀은로드 된 것처럼 보이지만 run() 함수의 맨 위에있는 print 문은 인쇄되지 않으므로 프로세스가 실제로 실행되지 않습니다.
나는 다른 스레드이 약을 추적하고 내가 handler.get()
다음 handler = self.pool.apply_async(learner_run.run)
보다 구체적으로 문제를 볼 수있는 것으로 나타났습니다. 이것은 "SystemError : PyObject_Call에서 오류없이 NULL 결과"를 인쇄합니다.
위대한, 내가 할 수있는 구글. 그러나 멀티 프로세싱과 관련하여이 문제를 발견 할 수있는 이유는 인수가 너무 커서 인수를 하위 프로세스로 전달할 때 발생할 수 있기 때문입니다. 그러나, 나는 분명히 내 하위 프로세스에 인수를 전달하지 않습니다. 그래서 무엇을 제공합니까?
할당 메모리 크기를 초과하는 인수를 제외하고 - 여기서는 문제가 아니라고 확신하지만 - apply_async가 null 결과를 초래할 수 있습니까?
다시 휴가를 떠나기 전에이 작업이 변경되어 변경되지 않았습니다. 다른 코드의 변경으로 인해 작동이 멈출 수 있습니까?
내가 그렇게 실행이 오류를 중지하지 않습니다 핸들러에서 get()
하려고하지 않는 경우
는, 메모리 사용량이 이상한 패턴을 따른다.