언제 multiprocessing.Pool.join을 호출해야합니까?
다음과 같이 'multiprocess.Pool.imap_unordered'를 사용하고 있습니다.
from multiprocessing import Pool
pool = Pool()
for mapped_result in pool.imap_unordered(mapping_func, args_iter):
do some additional processing on mapped_result
내가 전화를해야하나요 pool.close
또는 pool.join
루프의 후?
아니요, 그렇지 않습니다.하지만 수영장을 더 이상 사용하지 않는 것이 좋습니다.
이 SO 게시물 에서 Tim Peters가 전화를 걸 pool.close
거나 pool.join
잘 말한 이유 :
Pool.close ()에 관해서는 풀 인스턴스에 더 많은 작업을 제출하지 않을 때만 호출해야합니다. 따라서 Pool.close ()는 일반적으로 메인 프로그램의 병렬화 가능한 부분이 완료 될 때 호출됩니다. 그런 다음 이미 할당 된 모든 작업이 완료되면 작업자 프로세스가 종료됩니다.
작업자 프로세스가 종료 될 때까지 기다리기 위해 Pool.join ()을 호출하는 것도 좋은 방법입니다. 다른 이유 중에서도 병렬화 된 코드에서 예외를보고하는 좋은 방법이없는 경우가 많으며 (예외는 기본 프로그램이 수행하는 작업과 막연하게 관련된 컨텍스트에서만 발생 함), Pool.join ()은 발생한 일부 예외를보고 할 수있는 동기화 지점을 제공합니다. 그렇지 않으면 결코 볼 수 없었던 작업자 프로세스에서.
나는 같은 메모리 문제가 있었다 파이썬의 multiprocessing.pool로 성장하고 메모리 사용 킵 내가 사용하지 않은 경우를 pool.close()
하고 pool.join()
사용하는 경우 pool.map()
Levenshtein 거리를 계산하는 기능. 이 기능은 잘 작동했지만 Win7 64 시스템에서 제대로 가비지 수집되지 않았으며 전체 운영 체제가 다운 될 때까지 함수가 호출 될 때마다 메모리 사용량이 제어 할 수 없게되었습니다. 누수를 수정 한 코드는 다음과 같습니다.
stringList = []
for possible_string in stringArray:
stringList.append((searchString,possible_string))
pool = Pool(5)
results = pool.map(myLevenshteinFunction, stringList)
pool.close()
pool.join()
풀을 닫고 결합한 후 메모리 누수가 사라졌습니다.
참조 URL : https://stackoverflow.com/questions/38271547/when-should-we-call-multiprocessing-pool-join
'Programing' 카테고리의 다른 글
NodeList는 언제 라이브이고 언제 정적입니까? (0) | 2020.12.30 |
---|---|
VS2015- 'NuGetPackage'패키지가 올바르게로드되지 않았습니다. (0) | 2020.12.30 |
오류 : EACCES : 권한이 거부되었습니다. (0) | 2020.12.30 |
강렬한 자바 스크립트 루프가 브라우저를 멈추는 것을 막는 방법 (0) | 2020.12.30 |
Windows Mobile에서 C #의 파일에서 수정 된 날짜를 가져 오려면 어떻게합니까? (0) | 2020.12.30 |