0

32 개의 ThreadPool을 생성하기 위해 multiprocessing.pool.ThreadPool 라이브러리를 사용하여 32 코어 머신을 사용하고 있습니다. 제 2 케이스에 D 샘플 스 니펫을 지정했습니다. .multiprocessing.pool.ThreadPool 모듈을 사용하여 모든 CPU를 완벽하게 사용할 수 없습니다.

from multiprocessing.pool import ThreadPool as Pool 
import time 

def f(x): 
    return x[1] 

if __name__ == '__main__': 
    pool = Pool(32)    # start 4 worker processes 

    startTime=time.time() 
    twoDimensionalArraay=[[1,2],[2,3],[3,4],[4,5]] 

    d=pool.map(f,twoDimensionalArraay) 


    print time.time()-startTime 

위 명령을 실행 한 후. 밖으로 32 단 하나의 핵심은 바쁜 나머지는

Cpu(s): 2.3%us, 1.3%sy, 0.0%ni, 96.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 132158392k total, 98751480k used, 33406912k free, 230528k buffers 
Swap: 2097148k total,  0k used, 2097148k free, 17625092k cached 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                   
8062 centos 20 0 80.7g 75g 10m S 194.1 59.8 34:49.95 python 

사람이 모든 프로세서는 바쁜 것을

+0

'os.system ("taskset -p 0xFFFFFFFF % d"% os.getpid()) – dsgdfg

+0

"프로세스를 실행 한 후"라고 말하면 프로세스를 실행중인 _ 사용중인 프로세스의 수를 확인하십시오. – martineau

+0

죄송합니다. 프로세스가 실행 중일 때 – user3646858

답변

1

나는 '문제가 당신 때문이라고 생각 때문에 완전히이 CPU를 활용하는 방법을 말해 줄 수 IDLE있는 것을 보았다 multiprocessing.pool.ThreadPoolPool으로 사용하십시오 (multiprocessing.Pool이 아님). 전자는 파이썬 쓰레드를 감싸는 쓰레드 기반의 더미 (dummy) 프로세스 객체를 생성한다. 그래서 그것을 사용하면 후자처럼 별도의 프로세스를 생성하지 않는다.

대신 from multiprocessing import Pool을 사용해보세요.

+0

내 제안을 시도 했습니까? – martineau