파이썬은 멀티 프로세서 / 멀티 코어 프로그래밍을 지원합니까?
멀티 프로세서 프로그래밍과 멀티 코어 프로그래밍의 차이점은 무엇입니까? 멀티 프로그래밍 및 멀티 코어 프로그래밍을위한 작은 프로그램을 작성하는 방법을 파이썬으로 예시하는 것이 좋습니다.
"멀티 프로세서"또는 "멀티 코어"프로그래밍과 같은 것은 없습니다. "멀티 프로세서"와 "멀티 코어" 컴퓨터 의 구분은 응용 프로그램 프로그래머와 관련이 없습니다. 이는 코어가 메모리에 대한 액세스를 공유하는 방법의 미묘함과 관련이 있습니다.
멀티 코어 (또는 멀티 프로세서) 컴퓨터를 활용하려면 병렬로 실행할 수있는 방식으로 작성된 프로그램과 프로그램이 실제로 여러 코어에서 병렬로 실행될 수있는 런타임이 필요합니다. 운영 체제, PC에서 실행할 수있는 모든 운영 체제가이를 수행합니다.) 병렬 프로그래밍에 대한 다른 접근 방식이 있지만 이것은 실제로 병렬 프로그래밍입니다. 파이썬과 관련된 것은 멀티 프로세싱과 멀티 스레딩입니다.
C, C ++, Java 및 C #과 같은 언어에서는 여러 스레드를 실행하여 병렬 프로그램을 작성할 수 있습니다. CPython 및 PyPy 런타임의 전역 인터프리터 잠금은이 옵션을 배제합니다. 하지만 해당 런타임에만 해당됩니다. (내 개인적인 의견으로는 멀티 스레딩은 위험하고 까다 롭고 일반적으로 Python이이를 성능 이점을 얻는 방법으로 고려하지 않도록 권장하는 것이 좋습니다.)
Python의 여러 코어에서 실행할 수있는 병렬 프로그램을 작성하려면 몇 가지 옵션이 있습니다.
threading
모듈을 사용하여 다중 스레드 프로그램을 작성 하고 IronPython 또는 Jython 런타임에서 실행합니다.processing
모듈 (현재 Python 2.6에multiprocessing
모듈 로 포함됨)을 사용하여 한 번에 여러 프로세스에서 코드를 실행합니다.subprocess
모듈을 사용하여 여러 파이썬 인터프리터를 실행하고 그들 사이에서 통신하십시오.- Twisted 및 Ampoule을 사용하십시오 . 이것은 다른 프로세스에서 코드를 실행하는 것뿐만 아니라 잠재적으로 다른 컴퓨터에서도 잠재적으로 파일과 같은 것에 대한 액세스를 공유하지 않는 경우의 이점이 있습니다.
어떤 옵션을 선택하든 프로그램이 수행하는 작업을 분리 할 수있는 청크로 분할하는 방법을 이해해야합니다. 어떤 프로그램을 작성하려고하는지 잘 모르겠 기 때문에 유용한 예제를 제공하기 어려울 것입니다.
다른 포스트에서 언급했듯이 Python 2.6에는 다중 코어 / 프로세서를 활용할 수 있는 다중 처리 모듈이 있습니다 (여러 프로세스를 투명하게 시작하여 GIL을 우회합니다). 스레딩 모듈과 유사한 몇 가지 기본 요소를 제공합니다. 설명서 페이지에서 몇 가지 (간단한) 사용 예를 찾을 수 있습니다.
실제로 여러 프로세서를 사용하는 프로그램을 작성할 수 있습니다. GIL 잠금 때문에 스레드로는 할 수 없지만 다른 프로세스로 할 수 있습니다. 어느 한 쪽:
- 하위 프로세스 모듈을 사용하고 코드를 분할하여 프로세서별로 프로세스를 실행합니다.
- parallelpython 모듈 살펴보기
- python> 2.6을 사용하는 경우 다중 프로세스 모듈을 살펴보십시오 .
파이썬에서 멀티 스레딩과 일반적인 스레딩에 대해 읽을 수 있습니다.
Python의 멀티 스레딩 : http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/
내가 올바르게 이해한다면 Python에는 GIL (Global Interpreter Lock)이라는 것이있어 Python에서 여러 스레드를 수행 할 때 멀티 코어를 효과적으로 활용할 수 없습니다.
주제에 대한 Guido van Rossum의 블로그 항목 을 참조하십시오 . 내가 아는 한, "주류"언어 중 C / C ++와 Java만이 멀티 코어를 효과적으로 지원합니다.
주요 차이점은 데이터를 구성하고 배포하는 방법입니다. 멀티 코어는 일반적으로 CPU의 서로 다른 코어간에 더 높은 대역폭을 가지며 멀티 프로세서는 CPU 간의 버스를 더 많이 포함해야합니다.
Python 2.6은 다중 프로세스 (프로그램 실행과 같은 프로세스)와 다중 스레드 프로그래밍을위한 더 많은 동기화 및 통신 개체를 제공합니다.
Python 2.6이없는 경우 (예 : Ubuntu Edgy 또는 Intrepid를 사용하는 경우에는 없음) Google 코드 백 포트 버전의 다중 처리를 사용할 수 있습니다 . PyPI의 일부이므로 EasyInstall (Ubuntu의 python-setuptools 패키지의 일부)을 사용하여 쉽게 설치할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/203912/does-python-support-multiprocessor-multicore-programming
'Development Tip' 카테고리의 다른 글
VSCode의 "저장시 형식"에서 파일을 제외하는 방법은 무엇입니까? (0) | 2020.11.04 |
---|---|
동일한 프로젝트의 다른 파일에서 형식 / 모듈을 정의 / 사용하는 F # (0) | 2020.11.04 |
보이드의 크기는 얼마입니까? (0) | 2020.11.04 |
React Native에서 네트워크 요청 (디버깅 용)을 어떻게 볼 수 있습니까? (0) | 2020.11.03 |
Google Maps API v3 정보창 닫기 이벤트 / 콜백? (0) | 2020.11.03 |