다중 처리: 읽기 전용 데이터에 대한 공유 액세스 보장
다중 처리 시나리오에서는 프로세스 간 데이터 공유 문제가 자주 발생합니다. 특히 대규모 읽기 전용 데이터 구조를 처리할 때 이 데이터를 각 프로세스에 복사하는 것은 시간이 많이 걸리고 메모리 집약적일 수 있으므로 피하는 것이 바람직합니다.
다음 코드 조각을 고려하세요.
<code class="python">glbl_array = # a 3 Gb array def my_func( args, def_param = glbl_array): #do stuff on args and def_param if __name__ == '__main__': pool = Pool(processes=4) pool.map(my_func, range(1000))</code>
이 예에서는 전역 변수 glbl_array가 대형(3Gb) 어레이로 정의됩니다. my_func 함수는 glbl_array에서 작동하도록 설계되었습니다. Pool(processes=4)을 사용하여 병렬 실행을 위해 여러 프로세스가 생성되면 각 프로세스가 glbl_array에 있는 별도의 데이터 복사본을 수신합니까, 아니면 모든 프로세스가 동일한 읽기 전용 데이터를 공유합니까?
Linux에서는 다중 처리를 뒷받침하는 포크 시스템 호출의 의미 체계를 통해 쓰기 시 복사 의미 체계가 가능합니다. 즉, glbl_array가 읽기 전용인 경우 필요한 경우가 아니면 프로세스 간에 데이터가 물리적으로 복사되지 않습니다.
그러나 glbl_array가 수정되면 한 프로세스에서 변경한 내용이 다른 모든 프로세스에서 액세스할 수 있는 데이터에 반영됩니다. 프로세스. 원하지 않는 데이터 덮어쓰기를 방지하려면 glbl_array의 tostring() 표현과 같은 불변 객체를 함수의 기본 매개변수로 활용하는 것이 좋습니다.
또는 Python 다중 처리 모듈에서 제공하는 공유 메모리 기능을 활용할 수도 있습니다. 공유 메모리 세그먼트를 명시적으로 생성 및 관리하여 프로세스 간에 데이터가 중복되지 않도록 합니다.
위 내용은 다중 처리에서 읽기 전용 데이터에 대한 공유 액세스를 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!