2014-05-22 3 views
2

저는 현재 Julia에 간단한 IRC 봇을 작성하여 익숙해지며 사용자 입력을 계산할 수있는 수학 함수를 만들었습니다.Julia : 시간 제한을 eval에 설정할 수 있습니까

문제는 실행 시간이 아주 길어서 ping 시간 초과로 인해 IRC 서버에서 연결이 끊기는 수학 문제가 발생할 수 있다는 것입니다.

이 문제없이 식에 eval()을 어떻게 실행합니까? 나는 eval()이 사용하도록 허용 된 시간이나 몇 가지 멀티 스레딩을 제한한다고 생각하고 있었다.

답변

3

다음과 같은 (의사 코드)를 할 수있는 :

addprocs(1) # once on program startup to launch a dedicated computational worker 
require("my_computational_funcs.jl") # load computational functions on all processes 

response = RemoteRef() 
@async put!(response, remotecall_fetch(2, computational_func, args...)) # Run computation on worker 2 

start=time() 
while !isready(response) && (time() - start) < 30.0 # timeout of 30 seconds 
    sleep(0.1) 
end 

if !isready(response) 
    interrupt(2)  # interrupt the computation on 2 
    do_error_processing() 
else 
    do_response_processing(fetch(response)) 
end 
+0

응답은 @timed가 될 수 있습니까? – Tims

1

기본 제공 방법 (또는 다른 종류의 샌드 박싱)은 없지만 병렬 처리 도구 (docs 참조)를 통해 수행 할 수 있습니다. 대략 말하기, 당신은

p = addprocs(1) 
ref = @spawnat p 2+2 # For example 
sleep(10) 
isready(ref) || interrupt(p) 
fetch(r) # returns 4 

이 분명 정제를 필요로 뭔가를 가지고 싶지만, 그것은 당신에게 갈 수있는 무언가를 제공해야합니다.

+0

내가 코드, 또는 아무것도 유사한 작업을 가져올 수 없습니다. 그것은 당신의보기에있는 잠의 길이에 관계없이 필요한 시간 동안 달릴 것입니다. – Cruor

+0

예, 제 실수를 깨달았습니다 - 편집을 참조하십시오 –

관련 문제