2015-01-25 2 views
4

나는 최적화를 수행하기 위해 반복적으로 C++ 프로그램을 호출하는 Julia 스크립트를 가지고 있습니다. C++ 프로그램은 텍스트 파일을 작성한 다음 줄리아에게 결과를 읽고 다음에 수행 할 작업을 결정했습니다. 문제는 C + + 프로그램이 멈추는 경우 (1000 번 이상 1 번) 가끔씩 (최적화가 멈추는 경우도 있음), 전체 스크립트가 무한정 멈추어 모든 필요한 프로그램 호출을 통해 스크립트를 작성하기가 매우 어렵다는 것입니다. 시간 제한을 추가 할 수있는 방법이 있습니까? 프로그램이 10 분 내에 완료되지 않으면 새로운 추측 값으로 다시 시작할 수 있습니까?Julia의 명령 시간 초과

간단한 예 : 원하는

for k = 1:10 
    run(`program inputs`) 
end 

:

max_runtime = 10*60 # 10 minutes 
for k = 1:10 
    run(`program inputs`,max_runtime) 
end 

대안 :

max_runtime = 10*60 # 10 minutes 
for k = 1:10 
    deadline(function,max_runtime) 
end 

답변

5

어떻게 같은 약 :

max_runtime = 10*60 # 10 minutes 
for k = 1:10 
    proc = spawn(`program inputs`) 
    timedwait(() -> process_exited(proc), max_runtime) 
    if process_running(proc) 
     kill(proc) 
    end 
end 
+0

도와 줘서 고마워! 이 문제를 해결하는 데 어려움이 있습니다. 'timedwait' 호출에 도착하면 오류 메시지가 나타납니다. '오류 : 익명의 인수가 잘못되었습니다 ... timewwait에서 multi.jl : 익명의 파일에서 : 1552 : 285' 등'나는' 아직 익명의 기능에 익숙하지 않은데 거기에 문제가 있습니까? – tsteiner

+1

조금 더 놀아서, 나는'x'를'()'로 바꿀 때 작동한다는 것을 알았습니다. 왜 이런지 정확히 모르겠지만 도움을 주셔서 다시 한 번 감사드립니다! – tsteiner

+1

죄송합니다. 익명의 함수 호출을 망쳤습니다. 나는 내 대답을 테스트 했어야했지만 서둘러야하고 나중에는 도움이되는 것을 좀 더 빨리 얻고 싶었습니다. 문제를 일으킨 것에 대해 사과하고 감사드립니다. –