1
아래 코드를 확인하십시오.왜 파이썬 다중 처리에서 dict가 업데이트되지 않습니까?
dict을 초기화하고 함수 f로 보냅니다. return_dict의 주소를 확인했습니다. 프로세스 내에서 변경되지 않습니다. 그래서 나는 그 딕트가 업데이트되어야한다고 생각했다.
그러나 그것은 업데이트되지 않는다. 왜 그런가? 귀하의 Process()
from multiprocessing import Process
return_dict = dict({})
print id(return_dict)
def f(value, return_dict):
return_dict['value'] = value
print return_dict
p = Process(target=f, args=(100, return_dict))
p.start()
p.join()
print return_dict
그러나 return_dict의 메모리 주소가 변경되지 않습니다. 그것을 설명하는 방법? 그들이 다른 객체라면, 주소는 내가 생각하는 것과 같아서는 안됩니다. 만약 그들이 같은 개체를 누른 부모 변경 프로세스를 볼 수 있어야합니다 –
나는 메모리 주소가 프로세스 메모리 공간에 상대적인 컴퓨터의 메모리 내의 절대 주소가 아닌 것으로 가정합니다. 상위 프로세스의 오브젝트가 힙의 위치 X에 있으면, 하위가 생성 될 때이 오브젝트의 1 대 1 사본을 수신하게됩니다. 오브젝트 주소는 컴퓨터 내의 다른 프로세스 및 다른 메모리 세그먼트 임에도 불구하고 여전히 X에 있습니다. 세그먼트 프로세스 오류를 일으킬 수 있으므로 하위 프로세스는 부모 프로세스 메모리에 액세스 할 수 없습니다. – Hannu