>  기사  >  백엔드 개발  >  다중 처리에서 읽기 전용 데이터에 대한 공유 액세스를 보장하는 방법은 무엇입니까?

다중 처리에서 읽기 전용 데이터에 대한 공유 액세스를 보장하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-25 03:02:02687검색

How to Ensure Shared Access to Read-Only Data in Multiprocessing?

다중 처리: 읽기 전용 데이터에 대한 공유 액세스 보장

다중 처리 시나리오에서는 프로세스 간 데이터 공유 문제가 자주 발생합니다. 특히 대규모 읽기 전용 데이터 구조를 처리할 때 이 데이터를 각 프로세스에 복사하는 것은 시간이 많이 걸리고 메모리 집약적일 수 있으므로 피하는 것이 바람직합니다.

다음 코드 조각을 고려하세요.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.