다중 처리 시나리오에서는 공유 데이터를 보장하여 리소스 사용을 최적화하는 것이 중요합니다. 여러 프로세스에 걸쳐 중복되지 않습니다. 이러한 상황에서 읽기 전용 데이터가 처리되는 방식을 이해하면 상당한 메모리 및 성능 오버헤드를 줄일 수 있습니다.
다음 Python 코드를 고려하세요.
<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를 공유하도록 장려하시겠습니까?
중복 없이 공유 액세스를 보장하려면 Python의 다중 처리 모듈에서 제공하는 공유 메모리 메커니즘을 활용할 수 있습니다. 구현 방법은 다음과 같습니다.
<code class="python">import multiprocessing import ctypes import numpy as np shared_array_base = multiprocessing.Array(ctypes.c_double, 10 * 10) shared_array = np.ctypeslib.as_array(shared_array_base.get_obj()) shared_array = shared_array.reshape(10, 10) # Parallel processing def my_func(i, def_param=shared_array): shared_array[i, :] = i if __name__ == '__main__': pool = multiprocessing.Pool(processes=4) pool.map(my_func, range(10)) print(shared_array)</code>
이 코드는 multiprocessing.Array 클래스를 사용하여 공유 메모리 배열(shared_array_base)을 생성합니다. 그런 다음 편리한 조작을 위해 Numpy 배열(shared_array)로 변환합니다.
주 함수(my_func)는 불필요한 복사를 방지하기 위해 shared_array를 기본 매개변수로 사용하며, Linux의 쓰기 시 복사 의미론은 데이터 중복을 보장합니다. 공유 영역을 수정하는 경우에만 발생합니다.
코드를 실행하면 공유 shared_array가 중복 없이 인쇄되어 프로세스가 동일한 메모리 개체를 공유했음을 나타냅니다.
위 내용은 멀티프로세싱은 복제 없이 읽기 전용 공유 데이터를 공유할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!