在IPython集群中,如何优雅地中断工作进程

在IPython集群中,如何优雅地中断工作进程,ipython,ipython-parallel,Ipython,Ipython Parallel,我想在集群中运行一些作业,但如果作业花费的时间太长,我希望能够终止该作业。我可以从客户那里优雅地完成这项工作,并且仍然可以让员工做更多的工作吗 我的设想是,我想研究不同的机器学习分类器和超参数如何影响运行时间.fit()。如果时间太长,我只想放弃这个任务,继续下一个任务 我可以找到工人的PID,我可以使用kill()从客户端发送信号,但发送SIGINT、SIGHUP和SIGABRT似乎都会无情地杀死工人,而不仅仅是打断它。我无法在工作者代码中添加任何逻辑,因为我要计时并中断的是对.fit()的原

我想在集群中运行一些作业,但如果作业花费的时间太长,我希望能够终止该作业。我可以从客户那里优雅地完成这项工作,并且仍然可以让员工做更多的工作吗

我的设想是,我想研究不同的机器学习分类器和超参数如何影响运行时间
.fit()
。如果时间太长,我只想放弃这个任务,继续下一个任务


我可以找到工人的PID,我可以使用
kill()
从客户端发送信号,但发送SIGINT、SIGHUP和SIGABRT似乎都会无情地杀死工人,而不仅仅是打断它。我无法在工作者代码中添加任何逻辑,因为我要计时并中断的是对
.fit()
的原子调用。

您在Windows上吗?在Windows以外的平台上执行时,向引擎发送SIGINT应触发键盘中断。但是,如果它实际上处于空闲状态,而不是忙于处理某个任务,它可能会退出引擎。在(无头)工作进程的上下文中,我假设SIGINT没有被捕获(导致键盘中断),而是导致终止。默认情况下,SIGINT被捕获在Python中,如果用户代码正在运行,则会导致用户代码中的键盘中断。如果没有运行用户代码,它将停止引擎。演示如何中断引擎。如果
.fit()
是可中断的,这将起作用。谢谢您的代码。受此启发,在一个iPython实例中,我在调用
.fit()
的过程中按下了Ctrl-C,整个iPython过程就结束了。似乎
.fit()
不是Windows上的可中断文件。在Linux(我的目标)上没有残酷的死亡,但是
.fit()
拒绝被中断,只是一直处理到结束,然后引发
键盘中断
异常。最终结果是一样的
.fit()
似乎是不可中断的