2014-05-14 1 views
1

두 개의 for-loops가 있고 내부 코드는 C++ 프로그램 (여기서는 편집기 emacs로 바뀜)을 호출합니다.이 프로그램은 특정 시간 후에 종료되어야합니다. 추가로 한 가지 농도에 대해서 각각의 가속도는 (1, 2, 3, 4) 가속화를 위해 평행하게 계산되어야하고 다음 가속도는 각 가속도가 계산되어야한다.파이썬의 루프는 C++ 프로그램을 호출하고 시간이 끝난 후 루프로 돌아갑니다.

내 문제는 C++ 프로그램을 종료하기 위해 timelimit을 사용하면 파이썬 프로그래머가 다음 집중을 계산하기위한 루프로 돌아 가지 않는다는 것입니다.

나는 이미 더 쉬운 프로그램을 썼고 C++ 프로그램을 열기 위해 서브 프로세스를 시도했지만 특정 시간 후에 종료하지 않았다. 나는 타임 라인도 사용했다. 도와 주셔서 감사합니다!

#!/usr/bin/python2.7 
from multiprocessing import Pool 
import os 
import subprocess as sub 

x = set([1, 2, 3, 4, ]) 
y = set([11, 21, ]) 

def j_in_y(i): 
    for j in y: #concentration 
     print i+j 
     cll = 'timelimit -t5 -T2 emacs' #c++ program call, for test emacs 
     os.system(cll) 

for i in x: #acceleration 
    pool = Pool(processes=3) 
    pool.apply_async(j_in_y, (i,)) 
    pool.close() 
    pool.join() 

답변

0

당신은 내부 루프가 완료되기 전에 종료하기 위해 파이썬 프로세스를 방지하기 위해, 메인 루프의 끝에서

pool.join() 

를 추가해야합니다. 주 스레드는 풀의 스레드를 기다리지 않습니다.

+0

Sry 여기를 작성하는 것을 잊어 버렸습니다. 그러나 여하튼 그것은 종결하지 않는다. – user3637248

관련 문제