2017-04-23 2 views
1

매개 변수 (가급적이면 env 변수)가 있습니까? 파이썬에서 사용하는 최대 코어를 제한하도록 설정할 수 있습니까? 멀티 스레딩이나 numpy 같은 특정 패키지에 설정할 매개 변수가 있다는 것을 알고 있지만 파이썬 자체를 제어하여 N 코어 이상을 사용하지 않을 것이라고 확신합니다.우분투에서 파이썬의 코어 사용을 어떻게 제한합니까?

글로벌 매개 변수를 사용하는 이유는 동일한 네트워크에서 함께 작업 할 수 있도록 내 네트워크의 사용자에게 설정할 수 있기 때문입니다. 현재 스크립트를 실행할 때마다 파이썬은 가능한 한 많은 코어를 사용하여 다른 코어를 방해합니다.

파이썬 버전 2.6-7, 우분투 버전 14.04.

감사합니다.

+1

파이썬 [GIL] (https://docs.python.org/3/glossary.html#term-global-interpreterlock) 때문에 파이썬은 멀티 프로세싱이나 일부를 사용하지 않는 경우에만 하나의 코어만을 사용합니다 다른 유사한 모듈 (심지어 다른 코어에서 스레드가 실행되지 않음). 그 매개 변수가 정확히 무엇을 제한해야합니까? –

+0

예를 들어 Numpy는 많은 코어를 사용하기 때문에 그렇게하기 위해 다중 프로세싱 패키지를 가져올 필요가 없습니다. 이후 멀티 프로세싱을 위해 어떤 패키지가 사용되는지 잘 모르므로,이 방법으로 '더 나쁜'동작을 제어 할 단일 매개 변수를 사용하고 싶습니다. 사용하고있는 패키지에 대해 확신 할 수 있습니다. – yoki

+0

numpy는 표준 파이썬 라이브러리에 없습니다. 따라서 사용할 수있는 코어의 수를 제한 할 수있는 파이썬 플래그 또는 상수는 없습니다. –

답변

0

affinity 패키지를 사용하면 운영 체제 레벨의 각 프로세스를 단일 코어로 제한 할 수 있습니다. affinity은 기본 linux sched_setaffinity 함수를 호출하기 만하면 특정 코어 번호 또는 범위로 설정할 수 있습니다.

import affinity 
import os 
pid = os.getpid() 
affinity.set_process_affinity_mask(pid, 1) # 1 is the first core 
affinity.set_process_affinity_mask(pid, 2) # 2 is the second core 

는 코어의 범위를 설정하는 방법에 대한 자세한 내용은 pthread_setaffinity_np man page를 참조하면 다른 프로세스의 선호도를 설정하려는 경우 해당 프로세스를 관리 할 수있는 권한이 있어야합니다 것을 알 수 있습니다. 또한 자식 프로세스는 아버지의 프로세스 선호도를 상속받습니다.

관련 문제