다중 처리를 위해 공유 메모리에서 Numpy 배열 사용
numpy 배열에 공유 메모리를 활용하는 것은 다중 처리 시나리오에서 일반적입니다. 그러나 단순히 ctypes 배열이 아닌 numpy 배열로 잠재력을 최대한 활용하는 것은 어려울 수 있습니다.
해결책은 다중 처리 모듈에서 mp.Array()를 활용하는 데 있습니다. 이 기능을 사용하면 여러 프로세스에서 동시에 액세스할 수 있는 공유 배열을 생성할 수 있습니다. 이러한 배열을 numpy 배열로 액세스하려면 데이터 복사 오버헤드 없이 numpy.frombuffer()를 사용할 수 있습니다.
예:
import multiprocessing as mp import numpy as np def f(shared_arr): arr = np.frombuffer(shared_arr.get_obj()) arr[:] = -arr[:] if __name__ == '__main__': N = 10 shared_arr = mp.Array(ctypes.c_double, N) arr = np.frombuffer(shared_arr.get_obj()) # Create, start, and finish child processes p = mp.Process(target=f, args=(shared_arr,)) p.start() p.join()
이 예에서는 , f() 함수는 공유 배열을 사용하여 요소별 부정을 수행합니다. numpy 배열로 배열에 액세스하면 모든 강력한 작업과 메서드에 액세스할 수 있습니다.
동기화:
여러 프로세스가 동일한 공유 배열에 액세스하면 동기화 갈등을 예방하는 것이 중요합니다. mp.Array()는 필요에 따라 액세스를 동기화할 수 있는 get_lock() 메서드를 제공합니다.
# ... def f(i): with shared_arr.get_lock(): # synchronize access arr = np.frombuffer(shared_arr.get_obj()) arr[i] = -arr[i]
이 접근 방식을 활용하면 numpy 배열의 전체 기능을 유지하면서 다중 처리 환경에서 numpy 배열을 공유할 수 있습니다.
위 내용은 다중 처리를 위해 공유 메모리에서 NumPy 배열을 효율적으로 사용하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!