무거운 계산을 병렬 처리하기 위해 multiprocessing.Pool()
을 사용하고 있습니다.큰 데이터로 다중 처리
대상 함수는 많은 양의 데이터 (거대한 목록)를 반환합니다. 나는 RAM이 부족하다.
multiprocessing
이 없으면 대상 함수를 생성자로 변경하고 yield
결과 요소를 하나씩 차례로 계산합니다.
멀티 프로세싱이 생성자를 지원하지 않는다는 것을 이해합니다. 출력물 전체를 기다렸다가 즉시 반환합니다. 맞습니까? 항복하지 마라. Pool
근로자가 RAM에 전체 결과 배열을 만들지 않고도 데이터를 사용할 수있게되는 즉시 데이터를 산출 할 수있는 방법이 있습니까?
간단한 예 :
def target_fnc(arg):
result = []
for i in xrange(1000000):
result.append('dvsdbdfbngd') # <== would like to just use yield!
return result
def process_args(some_args):
pool = Pool(16)
for result in pool.imap_unordered(target_fnc, some_args):
for element in result:
yield element
이 파이썬 2.7입니다.
대기열에서 피클링 된 데이터가 전달됩니다. 따라서 데이터 -> pickle-> unpickle-> 새로운 데이터 사본. 이렇게하면 프로그램이 느려지고 RAM을 더 많이 사용하게됩니다. 대신 공유 메모리를 사용하는 것을 고려해야합니다. – Wang