2017-05-04 1 views
-1

임의의 함수를 병렬로 실행하기 위해 다음 도우미 함수를 작성했습니다.Python 다중 처리 풀이 아무것도하지 않습니다

import multiprocessing 


def runParallel(fns=[], args=[]): 
    print('Starting multiprocessing with %i cores' % (multiprocessing.cpu_count() - 1)) 
    pool = multiprocessing.Pool(processes=multiprocessing.cpu_count() - 1) 
    for fn, arg in zip(fns, args): 
     pool.apply_async(fn, (arg,)) 
    pool.close() 
    pool.join() 

제가

runParallel(itertools.repeat(self.processFile), fileNamesAndPaths) 

에는 processFile가 서명

def processFile(self, filename): 

와 classmethod이며 시작 함수의 itertools.repeat 호 및 파일명의리스트 기능을 호출 'print'- 절대로 실행되지 않는 문장. 프로그램은 "3 코어로 멀티 프로세싱 시작"출력 후에 끝납니다.

일반적으로 작품을 멀티 프로세싱에서 프로세스를 사용하지만, 그것은 처리 할 수있는 프로세스의 양 내 CPU 홍수 결국 정지하지만, 적어도에는 processFile 기능이 내가 원했던 이유는

from multiprocessing import Process 


def runParallel(fns=[], args=[]): 
    proc = [] 
    for fn, arg in zip(fns, args): 
     p = Process(target=fn, args=(arg,)) 
     p.start() 
     proc.append(p) 
    for p in proc: 
     p.join() 

라고 내 이해에서 주어진 시간에 프로세스의 양을 처리 할 것이기 때문에 풀을 사용하십시오.

64 비트 Windows 컴퓨터에서 2.7.10을 사용하면 도움이된다.

+0

'Process'와'fn' == 인스턴스 메소드에서 작동한다고 말하는 겁니까? –

+0

@ PeterWood 예.하지만 목록에 약 300 개의 파일이 있으므로 프로그램에서 300 초 후에 20 초 후에 PC가 손상됩니다. – NoMonkey

답변

-1

apply_asyncapply으로 대체하여 오류 출력을 확인할 수 있습니다. Btw, 그것은 python3에서 작동합니다. python2.7에 대해서는 잘 모르겠습니다.

+0

코멘트에서 코드의 형식을 올바르게 지정하지 마십시오. 마지막 줄을 게시합니다. 'cPickle.PicklingError : pickle > : 속성 조회 __builtin __. 인스턴스 메소드 실패 ' 해당 풀 제안 클래스 메소드를 처리 할 수 ​​없습니까? – NoMonkey

+0

@NoMonkey http://stackoverflow.com/questions/1816958/cant-pickle-type-instancemethod-when-using-pythons-multiprocessing-pool-ma 여전히 btw, 질문을 편집하여 코드를 게시 할 수 있습니다. – Sraw

+0

링크를 제공해 주셔서 감사합니다. 이 문제를 해결하는 데 도움이되는이 [link] (http://stackoverflow.com/questions/1816958/cant-pickle-type-instancemethod-when-using-pythons-multiprocessing-pool-ma/7309686#7309686)을 발견했습니다. – NoMonkey

관련 문제