궁극적으로 내가 뭘하려고하는지 궁금해하는 것은 그 라인에있는 정보로 계산을 한 다음 결과를 일부 전역 객체에 추가하는 것입니다. 일하다. 예를 들어, 아래 코드에서 test는 항상 0입니다. 나는 이것이 틀렸다는 것을 알고 있으며, 다른 방법으로 시도해 보았지만 여전히 효과가 없다.파이썬에서 다중 처리를 할 때 전역 변수가 변하는 경우
import multiprocessing as mp
File = 'HGDP_FinalReport_Forward.txt'
#short_file = open(File)
test = 0
def pro(temp_line):
global test
temp_line = temp_line.strip().split()
test = test + 1
return len(temp_line)
if __name__ == "__main__":
with open("HGDP_FinalReport_Forward.txt") as lines:
pool = mp.Pool(processes = 10)
t = pool.map(pro,lines.readlines())
전역은 일반적으로 당신이 뭔가를 잘못하고있는 징조이다. 프로그램을 피하는 방법을 바꾸는 것이 좋습니다 - 장기적으로 두통을 덜어주고 더 좋은 방법이 항상 있습니다. –
다중 처리 모듈의 요점은 동일한 프로세스에서 스레드가 아닌 자식 프로세스를 생성한다는 것입니다. 일반적으로 모든 상쇄 관계가 있습니다. 안타깝게도, 문서에서는 이러한 상반 관계에 대해 설명하지 않습니다. 이미 알고 있다고 가정합니다. 문서의 "프로그래밍 가이드 라인"을 모두 따르면 이해하지 못할 수도 있지만 실제로 배워야합니다. – abarnert