Julia:ctrl+c 不打断

Julia: ctrl+c does not interrupt

我在 VScode 中使用 REPL 并试图修复卡在某个包中的代码。我想通过查看堆栈跟踪找出哪个进程正在占用时间,但不能中断,因为 REPL 不响应 ctrl+c。我不小心按了 ctrl+x,屏幕上显示了 ^X。

我正在使用 JuMP 和 GLPK,所以它可能会卡在那里。但是,我没有看到任何输出。

我也很感激任何有关找出导致它卡住的进程的提示。

中断未在 GLPK.jl 中实现。我已经打开了一个问题:https://github.com/jump-dev/GLPK.jl/issues/171(但它不太可能很快得到修复)。

如果您有兴趣为 JuMP 做贡献,这是一个很好的入门问题。您可以查看 Gurobi.jl 代码,了解我们如何在那里处理中断作为灵感。

我开始使用 GLPK.jl 并且我还发现它会在大问题上“挂起”。但是,我建议尝试使用 Cbc.jl 求解器。它有一个时间限制参数,该参数将在设定的秒数内中断求解器。我发现它可以产生高质量的结果。 (或者您可以使用 Cbc 进行 Dev/QA 测试以确定可能导致挂起的原因并切换到 GLPK 以进行生产运行。)

您可以使用 seconds 参数设置时间限制,如下所示。

对于较新的软件包版本:

model = Model(optimizer_with_attributes(Cbc.Optimizer
                                        ,"seconds" => 60
                                        ,"threads" => 4
                                        ,"loglevel" => 0
                                        ,"ratioGap" => 0.0001))

或者对于旧的软件包版本是这样的:

model = Model(with_optimizer(Cbc.Optimizer
                             ,seconds=60
                             ,threads=4
                             ,loglevel=0
                             ,ratioGap=0.0001))