中断GNU并行之后如何将KeyboardInterrupt提升为Python脚本



我正在使用GNU并行程序为不同的参数列表运行Python脚本。在Python脚本中,我将数据写入一个文件(事实上,文件的名称就是脚本参数(。Python脚本在处理N个试验后将数据写入文件,其中N是另一个参数。因此,在所有试验完成之前,数据不会被写入。但进行审判的时间可能因测试论点的数量而异。因此,如果脚本对某组参数花费的时间太长,脚本允许我引发KeyboardInterrupt错误(Ctrl+C(,并在终止之前写入迄今为止获得的数据。

然而,通过使用GNU并行,使用Ctrl+C将终止并行命令,并完全停止Python作业,因此到目前为止还没有写入任何数据。

有可能在这些Python脚本中引发KeyboardInterrupt,让它们在并行被终止之前完成错误处理吗?理想情况下,它会变成1。执行parallel python script.py ::: args,2。一段时间后,使用Ctrl+C取消,3。Parallel命令Python脚本查看KeyboardInterrupt(或任何错误,都无关紧要(,Parallel暂停以等待Python作业完成处理,4。并行终止,5。我有当时获得的数据文件。

注意:我想要一个不要求重写Python脚本的数据编写方法的答案。

我相信您正在寻找--termseqmyprog.pl:

#!/usr/bin/perl
$SIG{'TERM'} = sub { print "TERM received. Flush files.n"; sleep(1); };
sleep(100);

现在运行:

parallel --termseq TERM,2000,KILL,20 -u ./myprog.pl ::: 1 2 3

当GNU并行程序接收到ctrl-c时,它将向子进程发送SIGTERM,等待2000毫秒,如果子进程还活着,则杀死该子进程。

等待几秒钟,然后按ctrl-c

如果您绝对确定Python程序将在收到SIGTERM后退出,那么您可以删除,KILL,20。如果Python程序由于某种原因被卡住,这只是一种倒退。

最新更新