>백엔드 개발 >파이썬 튜토리얼 >Python 다중 처리에서 대규모 읽기 전용 데이터를 효율적으로 공유하는 방법은 무엇입니까?

Python 다중 처리에서 대규모 읽기 전용 데이터를 효율적으로 공유하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-24 18:45:50792검색

How to Share Large Readonly Data Efficiently in Python Multiprocessing?

다중 처리에서 공유 읽기 전용 데이터 유지 관리

질문:

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

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