파이썬을 사용하여 일부 알고리즘을 실행하고 어떤 파이썬을 사용하든 많은 버전을 시도했지만 CPU 사용량은 최대 25 %입니다. 파이썬이 나머지 CPU 리소스를 활용하지 않는 이유는 무엇입니까? 서비스 우선 순위를 보통에서 높음으로, 나중에 다시 실시간으로 변경했지만 그 사이에 다시 시작했지만 아무것도 변경되지 않았습니다.
파이썬이 내 CPU의 50 % 이상을 사용하도록하는 방법이 있습니까?
파이썬을 사용하여 일부 알고리즘을 실행하고 어떤 파이썬을 사용하든 많은 버전을 시도했지만 CPU 사용량은 최대 25 %입니다. 파이썬이 나머지 CPU 리소스를 활용하지 않는 이유는 무엇입니까? 서비스 우선 순위를 보통에서 높음으로, 나중에 다시 실시간으로 변경했지만 그 사이에 다시 시작했지만 아무것도 변경되지 않았습니다.
파이썬이 내 CPU의 50 % 이상을 사용하도록하는 방법이 있습니까?
답변:
간단히 말해서 4 개의 논리 코어가있는 시스템에서 단일 스레드 응용 프로그램을 실행하는 것입니다. 따라서 모든 코어를 사용하는 하나의 프로세스가 있습니다.
다중 스레드가되도록 알고리즘을 다시 작성하거나 특정 코어에서 2 개 이상의 인스턴스를 실행하여 더 많은 CPU를 사용할 수 있는지 확인해야합니다. 다른 방법은 없습니다.
파이썬 언어는 멀티 코어 CPU보다 먼저 사용되므로 기본적으로 사용하지 않는 것은 이상한 일이 아닙니다.
또한 모든 프로그램이 여러 코어에서 이익을 얻을 수있는 것은 아닙니다. 다음 단계가 이전 단계의 결과에 의존하는 단계에서 수행 된 계산은 더 많은 코어를 사용하면 더 빠르지 않습니다. 개별 계산이 독립적이기 때문에 벡터화 할 수있는 문제 (대량의 데이터 배열에 동일한 계산을 적용)는 여러 코어를 사용하기가 비교적 쉽습니다.
많은 계산을 수행 할 때 numpy 사용한다고 가정합니다 . 그렇지 않은 경우 확인하십시오. ATLAS와 같은 최적화 된 선형 대수 라이브러리를 사용할 수있는 C로 작성된 확장입니다. 표준 Python과 비교하여 숫자 계산 속도를 크게 높일 수 있습니다.
파이썬에서 여러 코어를 사용하는 방법은 여러 가지가 있습니다.
multiprocessing
모듈입니다. 이 multiprocessing.Pool
클래스는 여러 CPU에서 벡터화 map()
및 관련 메소드를 제공합니다. 그러나 여기에는 절충점이 있습니다. 프로세스간에 많은 양의 데이터를 통신해야하는 경우 해당 오버 헤드로 인해 여러 코어의 이점이 무효화 될 수 있습니다.threading
이와 관련 하여 모듈이 모두 유용한 것은 아닙니다. 메모리 관리를 간단하게 유지하기 위해 전역 인터프리터 잠금 ( "GIL")은 한 번에 하나의 스레드 만 파이썬 바이트 코드를 실행할 수 있도록합니다. numpy와 같은 외부 모듈은 내부적으로 여러 스레드를 사용할 수 있습니다.