기존 코드 중 일부를 병렬 처리하려고합니다. 완료 될 때마다 각 반복의 출력을 저장하여 전체 루프를 메모리에 저장하지 않아도됩니다. 기본적으로 다음과 같은 내용이 있습니다 :Python : 다중 처리를 사용하여 각 반복마다 Pickle 출력
import cPickle as pickle
from multiprocessing import Pool
if __name__ == '__main__':
outf = open('test_mp.pkl', 'wb')
def f(x):
pickle.dump([x, x*x], outf, -1)
return x*x
pool = Pool(4)
out = pool.map(f, range(100))
print out
코드가 오류없이 실행되고 'out'에 대한 올바른 값을 생성합니다. 내가 생산 된 피클 파일을 읽으려고 그러나, 아무것도 전혀 기록 된 것 같다 :
>>> f = open('test_mp.pkl', 'rb')
>>> pickle.load(f)
---------------------------------------------------------------------------
EOFError Traceback (most recent call last)
<ipython-input-4-4d7131bbd231> in <module>()
----> 1 pickle.load(f)
EOFError:
내가 피클로 덤프 할 수없는 이유에 대한 손실에 현재 해요 루프의 중간에있는 객체. 다중 처리 (즉, for 루프)없이이 코드를 시도했지만 정상적으로 작동합니다.
또한이 함수를 main() 외부로 옮기고 추가 인수로 'outf'를 전달했습니다. 이 메서드는 닫힌 파일에 쓰려고 시도하는 것에 대한 오류를 제공합니다.
루프가 병렬 처리 될 때 출력을 피클 파일에 저장할 수 있습니까?
다른 프로세스 * 상태를 공유하지 않습니다 *. –