Handling SIGINT in JuliaLang



是否有可能捕获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,如果是的,则将以值返回。否则会出错。

最新更新