파일이나 전역 변수를 읽는 데 파이썬 다중 처리를 테스트했지만 뭔가 이상합니다. expample에 대한이상한 일이 파이썬 다중 프로세스에서 발생합니다.
는 :
import multiprocessing
a = 0
def test(lock, name):
global a
with lock:
for i in range(10):
a = a + 1
print "in process %d : %d" % (name, a)
def main():
lock = multiprocessing.Lock()
p1 = multiprocessing.Process(target=test, args=(lock, 1))
p2 = multiprocessing.Process(target=test, args=(lock, 2))
p1.start()
p2.start()
p1.join()
p2.join()
print "in main process : %d" % a
if __name__=='__main__':
main()
이 프로그램은 전역 변수를 읽을 수 있지만 출력은 다음과 같습니다
in process 1 : 10
in process 2 : 10
in main process : 0
그것은 하위 프로세스가 얻을 제대로 전역 변수를 편집 할 수 없습니다 것으로 보인다. 또한 파일을 읽도록 프로그램을 변경하면 각 하위 프로세스는 잠금을 무시하고 파일을 완전히 읽습니다.
그렇다면 어떻게 될까요? 그리고이 문제를 해결하는 방법?
난 당신이 당신은 멀티 스레딩 대신 동시 실행을 위해 멀티 프로세싱 사용할 수있는'multiprocessing.Manager' – mgilson
를 사용하여 글로벌 상태를 관리해야합니다 믿습니다 예를 들면 다음과 같습니다이다. 모든 스레드는 단일 프로세스의 일부입니다. – VPfB