2014-09-30 2 views
0

some.exe과 같은 하위 프로세스 목록을 계획 중입니다.가변 수의 하위 프로세스를 계속 실행하십시오.

max_processes = 4 
proc_list = [] 
for i in range(100): 
    while len(proc_list) <= max_processes: 
     proc_list.append(subprocess.Popen(["some.exe", i])) 

프로세스는 배경 및 지속적으로 실행해야 max_processes의 수에서 작동합니다. 의 일부 st.exe는입니다.

이것은 내가하고 싶은 일의 대략적인 계획입니다. 심지어 이것이 가능한가, 아니면 전체 개념을 다시 생각해야합니까?

+1

관련 : [Python threading multiple bash subprocesses?] (http://stackoverflow.com/q/14533458/4279) – jfs

답변

2

multiprocessing.Pool 또는 multiprocessing.pool.ThreadPool을 사용할 수 있습니다. 이 평행 기능을 실행하는 것을 제외하고 map 같은

from multiprocessing import Pool 
# OR from multiprocessing.pool import ThreadPool as Pool 
import subprocess 

def run_some_exe(i): 
    subprocess.call(['some.exe', i]) 

if __name__ == '__main__': 
    max_processes = 4 
    pool = Pool(max_processes) 
    pool.map(run_some_exe, range(100)) 

mulitprocess.Pool.map 작품. (위 예제에서 최대 4)

+0

제안을 주셔서 대단히 감사합니다. 어떻게' pool.map (lambda [...]'다른 식으로'i'를 결정해야한다면''some_var = False : if = some_list [j]'라고 말하십시오. 'pool.map [...]'주위에'some_bool : while while'some_bool :'을 호출하고 매번'i'를 할당하고'pool.map (subprocess.call ([ 'some.exe', i)))'를 호출한다. * some_bool *이 4 번 실행되고 * some_bool *이 False가 될 때까지 –

+1

'if __name__ == '안에 람다 (lambda)를 사용하기 때문에 Windows에서는 작동하지 않습니다. __main __ "'가드. 가드 외부의 최상위 함수를 사용해야합니다. – dano

+0

@ dano, 의견을 주셔서 감사합니다. accordi의 응답을 업데이트했습니다. 응. – falsetru

관련 문제