다중 처리에서 공유 읽기 전용 데이터 유지 관리
질문:
Python 다중 처리 환경에서, 복사본을 생성하지 않고 크기가 큰 읽기 전용 어레이(예: 3Gb)가 여러 프로세스에서 공유되도록 하는 방법은 무엇입니까?
답변:
NumPy와 함께 멀티프로세싱 모듈을 사용하면 프로세스 간에 데이터를 효율적으로 공유할 수 있습니다.
<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)</code>
이 접근 방식은 Linux가 fork()에 대해 쓰기 시 복사 의미 체계를 사용한다는 사실을 활용하여 다음과 같은 경우에만 데이터가 복제되도록 합니다. 수정되었습니다. 결과적으로 multiprocessing.Array를 명시적으로 사용하지 않아도 데이터는 변경되지 않는 한 프로세스 간에 효과적으로 공유됩니다.
<code class="python"># 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>
이 코드는 공유 배열을 동시에 수정하고 여러 프로세스 간에 데이터가 성공적으로 공유되는 것을 보여줍니다.
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] [ 2. 2. 2. 2. 2. 2. 2. 2. 2. 2.] [ 3. 3. 3. 3. 3. 3. 3. 3. 3. 3.] [ 4. 4. 4. 4. 4. 4. 4. 4. 4. 4.] [ 5. 5. 5. 5. 5. 5. 5. 5. 5. 5.] [ 6. 6. 6. 6. 6. 6. 6. 6. 6. 6.] [ 7. 7. 7. 7. 7. 7. 7. 7. 7. 7.] [ 8. 8. 8. 8. 8. 8. 8. 8. 8. 8.] [ 9. 9. 9. 9. 9. 9. 9. 9. 9. 9.]]
이 접근 방식은 공유 메모리와 기록 중 복사 의미 체계를 활용하여 다중 처리 환경의 프로세스 간에 대량의 읽기 전용 데이터를 공유하기 위한 효율적인 솔루션을 제공합니다.
위 내용은 Python 다중 처리에서 대규모 읽기 전용 데이터를 효율적으로 공유하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!