2017-02-15 14 views
0

긴 시간만큼 실행 과정에서 동일한 스레드를 계속 사용 :파이썬 내가 병렬 내가 6 시간 이상 계속 실행하고자하는 모델이

pool = multiprocessing.Pool(10) 
for subModel in self.model: 
    pool.apply_async(self.compute, subModel, features) 
pool.close() 
pool.join() 

I가 가지고있는 문제는 바로 지금, 너무 느립니다 모델이 6 시간 내에 여러 번 실행되는 동안 10 개의 스레드를 구성하고 해체 할 때마다 pool = multiprocessing.Pool (10) 및 pool.join()을 호출합니다.

내가 생각하는 솔루션은 10 개의 스레드가 백그라운드에서 실행되도록 유지하는 것이므로 새로운 데이터가 들어올 때마다 새로운 스레드를 만들고 걱정할 필요없이 많은 시간을 낭비하는 것을 걱정하지 않아도됩니다.

파이썬에서 오랜 프로세스를 실행하여 반복적으로 시작하고 중지 할 필요가없는 방법이 있습니까?

+0

한 번에 하나의 파이썬 스레드 만 실행할 수 있다는 것을 알고 계십니까? – nwp

+0

GIL과 함께 쓰레드 클래스와 달리 multiprocessing.pool이 여러 스레드를 동시에 실행할 수 있다고 생각했습니다. –

+0

@nwp'multiprocessing.Pool'은 GIL의 영향을받지 않습니다. "스레드"가있는 것으로 풀을 참조하는 것은 올바르지 않습니다. – Sneftel

답변

1

하나의 작업 세트를 제출 한 후 Pool을 제출하면 close()join() (파괴)하지 않아도됩니다. 계속하기 전에 apply_async()이 완료되었는지 확인하려면 대신 apply()으로 전화를 걸어 다음번에 Pool을 사용하십시오. 또는 작업을 기다리는 동안 다른 작업을 수행 할 수있는 경우 apply_async에 의해 반환 된 결과 개체를 저장하고 완료되지 않은 채로 완료 할 수없는 경우 wait()을 호출하십시오.

+0

thx 많이 Sneftel –