programing

우리는 언제 멀티프로세싱을 호출해야 합니까?수영장. 가입?

lastmoon 2023. 8. 25. 23:55
반응형

우리는 언제 멀티프로세싱을 호출해야 합니까?수영장. 가입?

나는 '멀티프로세스'를 사용하고 있습니다.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포 루프 이후에?

아니요, 그렇지는 않지만, 수영장을 더 이상 사용하지 않으신다면 아마 좋은 생각일 거예요.

전화를 거는 이유pool.close또는pool.join팀 피터스가 SO 포스트에서 잘 말한 바 있습니다.

Pool.close()에 대해서는 Pool 인스턴스에 더 이상 작업을 제출하지 않을 때(그리고 그럴 때만)따라서 Pool.close()는 일반적으로 기본 프로그램의 병렬 가능한 부분이 완료되면 호출됩니다.그러면 이미 할당된 모든 작업이 완료되면 작업자 프로세스가 종료됩니다.

또한 Pool.join()을 호출하여 작업자 프로세스가 종료될 때까지 기다리는 것이 좋습니다.다른 이유 중 하나는 예외를 병렬화된 코드로 보고하는 좋은 방법이 없는 경우가 많으며(예외는 기본 프로그램이 수행하는 작업과 모호하게 관련된 컨텍스트에서만 발생함), Pool.join()은 작업자 프로세스에서 발생한 일부 예외를 보고할 수 있는 동기화 지점을 제공합니다.

Python의 multiprocessing.pool을 사용하지 않을 때 메모리 사용량이 계속 증가하는 것과 동일한 메모리 문제가 있었습니다.pool.close()그리고.pool.join()사용 시pool.map()레벤슈테인 거리를 계산하는 함수로.이 기능은 정상적으로 작동했지만 Win764 시스템에서 가비지가 제대로 수집되지 않았으며, 이 기능을 호출할 때마다 메모리 사용량이 통제할 수 없을 정도로 증가하여 운영 체제 전체가 다운될 때까지 메모리 사용량은 계속 증가했습니다.누출을 해결한 코드는 다음과 같습니다.

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

반응형