2017-05-12 7 views
0

저는 파이썬과 멀티 프로세싱 모듈에 익숙하지 않습니다. 내 문제를 해결하기 위해 수행하려는 작업을 단순화 된 버전으로 만들었습니다. 문제는 변수가 함수 밖에서 호출 될 때 업데이트되지 않는 것인데, 함수가 추가되면/작업자 프로세스가됩니다.멀티 프로세싱 풀을 사용하여 목록 추가하기

연구를 마친 후에 대기열과 관련이 있다고 생각 했습니까? 그러나, 대기열은 각각의 목록이 독립적으로 추가 될 수 있기 때문에 내 상황에서 필요하다고 생각하지 않는 프로세스간에 메모리를 공유하는 것에 대해 더 많은 것으로 믿습니다. 나는 위의 코드를 실행하면

from multiprocessing import Pool 

def build(array): 
    array.append("hello") 
    return array 


if __name__== '__main__': 
    x=["yo","sup"] 
    y=["blah", "blah"] 
    z=["apple","banana"] 
    w=["cats", "dogs"] 

    p=Pool(4) 
    p.map(build,[x,y,z,w]) 
    p.close() 
    p.join() 

    print x, y, z, w 

는 단순히 각 목록에 "안녕하세요"를 추가하지 않고 전가로 w X, Y, Z를 반환하고 그 이유를 알아낼 수 없습니다. print 문을 함수의 끝에 넣으면 빌드이 추가 목록을 출력한다는 것을 알고 있습니다. 나는 또한 내가 할 수있는 것을 깨닫게 다음

results = p.map(build,[x,y,z,w]) 

print results 

하지만, 내 실제 프로젝트에 나중에 승 X, Y, Z를 활용해야하고 내가 목록을 가져올 수 결과를 지수로하지를 선호 찾고. 어쨌든 목록에 만들어진 변경 사항을 말하자면, 말하자면, 작업자 프로세스 외부에 있습니까?

답변

1

과정은 그래서 당신의 목록이 프로세스 풀 근로자 메모리로 복사됩니다 자신의 메모리 힙을 가지고 있으며,

+0

있어 당신을 감사 변경! – user129818