멀티코어 성능을 위해 Python 루프를 병렬화하는 방법
질문:
CPU의 경우 -바운드 Python 루프, 다중 루프의 기능을 활용하기 위해 작업을 효과적으로 병렬화하는 방법 코어?
답변:
Python 인터프리터는 GIL(Global Interpreter Lock)을 적용하여 동일한 인터프리터의 스레드에서 Python 코드를 동시에 실행하는 것을 금지합니다. 따라서 CPU 바인딩된 작업의 경우 스레드 대신 여러 프로세스를 활용하는 것이 더 효율적입니다.
프로세스 풀을 사용한 병렬화:
Python은 프로세스 풀을 생성하는 두 가지 간단한 방법을 제공합니다. :
pool = multiprocessing.Pool(4) out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
이 접근 방식은 다중 처리 모듈을 활용하고 스레드 수를 직접 제어할 수 있습니다. 그러나 대화형 인터프리터에서는 문제가 발생할 수 있습니다.
with concurrent.futures.ProcessPoolExecutor() as pool: out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
이 방법은 동시 해석을 사용합니다. .futures.ProcessPoolExecutor이며 다중 처리 모듈 위에서 작동하여 유사한 기능을 제공합니다.
두 가지 방법 모두 루프 반복을 별도의 프로세스에 분산하여 병렬화를 달성하여 CPU 바인딩된 계산 성능을 크게 향상시킵니다.
위 내용은 멀티코어 성능을 위해 CPU 바인딩된 Python 루프를 어떻게 병렬화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!