다중 처리 스레드간에 사전을 공유하려고합니다 .Pool. 그러나 현재 구현에서는 실패했습니다. 테스트 코드 :다중 처리를 사용하여 스레드간에 사전을 공유하는 방법.
#!/usr/bin/env python
import multiprocessing
success_map = {"1": []}
def run_(input):
global success_map
successes = success_map.get(input);
successes.append(0)
print success_map
pool = multiprocessing.Pool()
pool.map(run_, ["1"])
pool.close()
pool.join()
print success_map
출력은
{'1': [0]}
{'1': []}
그것은 나에게 multiprocessing.Pool의 직원 (들) (보이는)이 사전의 복사본을 만드는 것입니다; 그래서 처리가 끝나면 업데이트를 볼 수 없습니다. 내가 맞습니까?
참고 : 나는 run_
함수에서 값을 반환하고 pool.map(run_, ["1"])
의 결과로 수집 된 목록을 얻을 수 있지만 가능한 알고 있어요
- 내가
global
문이이 경우에 필요하지 않습니다 어디 선가 읽은 적이 있지만 예는 - I가
[["1", success_map]]
을 통과 같은 결과를 가지고없이 동일한 방식으로 작동 - dataraces
pool.map
; 전역 변수를 사용하지 않고
이 예제에서는 스레드간에 success_map
을 공유 할 수 있습니까?
관련,하지만 대답 : Python Multiprocessing appending list