2014-11-03 4 views
1

multiprocessing 모듈을 사용하여 파이썬에서 병렬 코드를 코딩하려고하는데 어떤 CPU가 계산 중인지 로컬로 알기위한 방법을 알고 싶지만 multiprocessing.CPU_count() 만 알고 있습니다. 전체 CPU 코어를 파악할 수 있습니다.파이썬 멀티 프로세싱 : 스레드/CPU 번호 알리기

나는 동등한 찾고 있어요 : C++의 OpenMP에서

omp_get_thread_num() 

.

Python.multiprocessing에서 그런 방법이 있습니까?

+0

당신은 읽을 수 :

for i in xrange(multiprocessing.CPU_count()): mp = multiprocessing.Process(target=foo, args=(bar,), name=i).start() 

그리고 작업자 함수 내에서이를 검색

는 하위 프로세스에서 양산 다중 처리 문서 [여기] (https://docs.python.org/2/library/multiprocessing.html)에 존재하는지 확인하십시오. – zamk

답변

5

이 프로세스가 (모든 가능한 경우)에서 실행되고있는 CPU 검색 사소한 아니지만, 만약 당신이 :

  • 시작 multiprocessing.CPU_count()에 의해보고 된 사용 가능한 CPU가 있기 때문에 프로세스의 같은 수의 대부분의 응용 프로그램 에서처럼

  • multiprocessing 모듈을 사용할 때 예상대로 각 프로세스가 별개의 CPU 코어에서 실행된다고 가정하십시오.

그럼 당신은 "속임수"를 각 프로세스에게 자사의 CPU 코어를 식별하는 고유 한 이름을 줄 수 있습니다! official documentation에서

print "I'm running on CPU #%s" % multiprocessing.current_process().name 

:

multiprocessing.current_process().name

The process’s name. 

The name is a string used for identification purposes only. It has no semantics. 
Multiple processes may be given the same name. 
The initial name is set by the constructor. 
+0

고맙습니다. 비슷한 해결책을 선택했는데, 인덱스'i'를 인수로 사용하거나 부울 값으로'i == 0'을 전달 했으므로 한 프로세스 만 'True'값을 가지며이 프로세스 만 출력했습니다 화면에 예를 들어 진행 정보를 제공합니다 (오버 헤드 방지). 나는'다중 처리 (multiprocessing) '가 C++ OpenMP와 동일한 변수를 가지고 있다고 생각했지만,이 경우에는이 장애물을 우회하는 것이 그렇게 어렵지 않습니다. –

관련 문제