2013-03-26 7 views
1

python 3.3에서 작동하도록 멀티 프로세싱을 얻으려고 노력하는 동안 (필자는 joblib로 빨리 되돌아 가서 더 쉽게 작업 할 수있게되었습니다.) 그러나 나는 (내 관점에서) 아주 이상한 것을 경험한다. 이 코드를 실행하는 경우 (작동하는지 단지 테스트) :Joblib parallel이 n 작업에 의해 시간을 늘림

Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(200000)) 

그것은 약 9 초 정도 걸리지 만 n_jobs을 증가시켜 실제로 오래 걸립니다 ... n_jobs=2 위해 25 초 소요 n_jobs=4이 27 초 정도 걸립니다.
내가 틀렸다면 정정 해주십시오. 그러나 n_jobs이 증가하면 훨씬 더 빨리 진행되지 않아야합니까? 나는 Intel I7 3770K를 가지고 있기 때문에 내 CPU의 문제는 아니라고 생각한다.

아마 내 원래의 문제는 대답이나 해결책의 가능성을 높일 수 있습니다.
나는 30k + 문자열, data의 목록을 가지고 있으며 각 문자열 (다른 문자열과 무관)로 뭔가를해야합니다. 약 14 초가 걸립니다. 이것은 내 코드가 작동하는지 확인하는 테스트 케이스에 불과합니다. 실제 애플리케이션에서는 아마도 100k + 엔트리 일 것이므로 다중 계산이 필요합니다. 이것은 전체 계산의 일부에 불과하기 때문입니다. 이것은 계산의이 부분에서 수행해야 할 것입니다 : 코어의 최대 수는 사용으로

data_syno = [] 
for entry in data: 
    w = wordnet.synsets(entry) 
    if len(w)>0: data_syno.append(w[0].lemma_names[0]) 
    else: data_syno.append(entry) 
+0

당신이 우분투를 사용하는 경우,이 스레드를 확인하십시오 http://stackoverflow.com/questions/15639779/python-what-determines-whether-different-processes-are-assigned-to-the-same-or – oteCortes

+0

아니요, 저는 Windows 7 64 비트를 사용하고 있습니다. – Tim

답변

0

n_jobs 매개 변수는 -1이다 카운터 직관적이다. 1에서 하나의 코어 만 사용합니다. 앳 -2 그것에서, MAX-1의 코어를 사용 -3은 등 MAX-2 코어를 사용하여 I가 판독 방법 한게 :

n_jobs : INT :

워드 프로세서

The number of jobs to use for the computation. If -1 all CPUs are used. If 1 is given, no parallel computing code is used at all, which is useful for debugging. For n_jobs below -1, (n_cpus + 1 + n_jobs) are used. Thus for n_jobs = -2, all CPUs but one are used.