是否有可能捕获sigint阻止朱莉娅(Julia)程序运行,但以"有序"的方式进行操作?
function many_calc(number)
terminated_by_sigint = false
a = rand(number)
where_are_we = 0
for i in eachindex(a)
where_are_we = i
# do something slow...
sleep(1)
a[i] += rand()
end
a, where_are_we, terminated_by_sigint
end
many_calc(100)
说我想结束30秒的时间,因为我没有意识到这需要这么长时间,但不想丢弃所有结果,因为我还有另一种继续从where_are_we-1
继续进行的方法。是否可以尽早(轻柔地)停止它,但是使用Sigint信号?
您可以使用try ... catch ... end
并检查错误是否中断。
对于您的代码:
function many_calc(number)
terminated_by_sigint = false
a = rand(number)
where_are_we = 0
try
for i in eachindex(a)
where_are_we = i
# do something slow...
sleep(1)
a[i] += rand()
end
catch my_exception
isa(my_exception, InterruptException) ? (return a, where_are_we, true) : error()
end
a, where_are_we, terminated_by_sigint
end
将检查异常是否是Interupt,如果是的,则将以值返回。否则会出错。