2014-02-14 5 views
0

병렬 처리를 위해 별도의 모듈에서 함수를 호출하는 스크립트를 만들려고합니다.다중 처리 : 가져온 함수 내에서 풀 사용

내 '최상위'스크립트는 다음과 같습니다

descriptors 모듈은 다음과 같습니다
from hydrology import model, descriptors 
if __name__ == "__main__": 
    datafile = r"C:\folder\datafile.shp" 
    myModel = model.Model(data = datafile) 

    res = descriptors.watershed_pll(myModel) 

: 당신이 볼 수 있듯이

from multiprocessing import Pool 
from arcfunc import multi_watershed 

def watershed_pll(model): 
    pool = Pool() 
    for key, val in model.stations.iteritems(): 
     res = pool.apply_async(multi_watershed(val, key)) 
    pool.close() 
    pool.join() 
    return res 

병렬로 실행할 수있는 기능이에서 수입 모듈 arcfunc, 병렬 처리를 수행하는 기능이 모듈 descriptors 안에 있고 모든 것을 실행하는 스크립트가 다시 분리됩니다. 내가 실행할 때

는 예외가 없습니다, 그러나 나는 두 가지 문제가 있습니다

  1. res.successful을()이 더 빠른 멀티 프로세싱이없는 것보다 실행
  2. False를 반환하지 않습니다.

내 아키텍처가 문제를 일으키고 있다고 생각하지만 병렬 처리 기능이 별도의 모듈에 있어야합니다.

제안 사항?

답변

0

apply_async에 함수와 인수를 전달하는 대신 코드에서 직접 (주 프로세스에서) multi_watershed을 호출하고 함수의 반환 값을 전달합니다.

함수와 인수를 전달하십시오.

선 다음 바꾸기 :

res = pool.apply_async(multi_watershed(val, key)) 

로 :

res = pool.apply_async(multi_watershed, (val, key)) 
+0

대만족을! 감사. 음, 작동하지만 여전히 문제가 없습니다. 이것은 사용중인 외부 라이브러리와 관련이있을 수 있습니다 : arcpy .... – jramm

+0

@jramm, 죄송 합니다만, 나는 arcpy에 대해 모른다. – falsetru

관련 문제