2013-11-25 2 views
0

파이썬에서 일부 코드를 병렬 처리하려고합니다. 직렬로 실행하려면 약 24 시간이 걸리지 만 각 반복이 이전 반복과 독립적 인 for 루프가 있으므로 병렬화에 이상적인 상황입니다. 나는 다음과 같이 내 코드가 달성하려고 무엇의 간단한 예를 들어,파이썬 루프를 병렬 처리합니다.

import scipy as sci 
from multiprocessing import Pool 

def mycode(args): 
    for x in range(0,2000) 
    y = sci.fft(data[x,:],axis=1) 
    output[x,:]=y 
    return output 

if __name__=="__main__": 
    pool=Pool(processes = 8) 
    output= pool.map(mycode(args),2000) 

그러나이 맨 위에보고에서, 나는 볼 수 파이썬은 하나 실제로 CPU 파워를 사용하고, 9 개 파이썬 프로세스를 생성하지만 그 또는 메모리. 나머지는 모두 0 %입니다. for 루프를 사용하여 Pool을 사용하는 올바른 방법은 무엇입니까?

+5

'reconstruction'기능이란 무엇입니까? 호출 가능을 반환합니까? 왜 pool.map에 대한 두 번째 인자가 반복 가능한 것이 아닌 숫자 (2000)인가? 당신의 예제에 결코 호출되지 않는다면 왜 mycode 함수가 존재합니까? –

+0

반복 가능한 인수로 2000은 1 개의 프로세스 만 사용합니다. –

답변

1

이 데이터 변수가 전역 변수로 정의되어 있으면이 작업이 가능합니다.

import scipy as sci 
from multiprocessing import Pool 

def mycode(x): 
    y = sci.fft(data[x,:],axis=1) 
    return y 

if __name__=="__main__": 
    pool=Pool(processes = 8) 
    output= pool.map(mycode,range(2000)) 
관련 문제