中断 GNU Parallel 后如何将 KeyboardInterrupt 提高到 Python 脚本?
How to Raise KeyboardInterrupt to Python Scripts After Interrupting GNU Parallel?
我正在使用 GNU Parallel to 运行 一个 Python 脚本来获取不同参数的列表。在 Python 脚本中,我正在将数据写入文件(实际上,文件名就是脚本参数)。 Python 脚本在处理 N 次试验 后将数据写入文件 ,其中 N 是另一个参数。因此,在所有试验完成之前不会写入数据。但是通过试验的时间可能会因许多测试参数而异。出于这个原因,如果脚本对于特定参数集花费的时间太长,脚本允许我引发 KeyboardInterrupt 错误 (Ctrl+C) 并在终止之前写入到目前为止获得的数据。
但是,通过使用 GNU Parallel,使用 Ctrl+C 将终止并行命令,并完全停止 Python 作业,因此到目前为止没有数据被写入。
是否可以在这些 Python 脚本中引发 KeyboardInterrupt 以让它们在并行被终止之前完成错误处理?理想情况下,它会像 1. 执行 parallel python script.py ::: args
,2. 一段时间后,使用 Ctrl+C 取消,3. Parallel 告诉 Python 脚本查看 KeyboardInterrupt(或任何错误,它没关系)并且并行暂停等待 Python 个作业完成处理,4. 并行终止,5. 我有包含当时获得的数据的文件。
注意:我想要一个不要求重写Python脚本的数据写入方法的答案。
我相信您正在寻找 --termseq
。 myprog.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 Parallel 接收到 ctrl-c 时,它将发送 SIGTERM
到 child,等待 2000 毫秒,如果 child还活着杀了child.
稍等几秒后按ctrl-c
如果您完全确定 Python 程序会在收到 SIGTERM
后退出,那么您可以删除 ,KILL,20
。如果 Python 程序由于某种原因卡住,这只是一个回退。
我正在使用 GNU Parallel to 运行 一个 Python 脚本来获取不同参数的列表。在 Python 脚本中,我正在将数据写入文件(实际上,文件名就是脚本参数)。 Python 脚本在处理 N 次试验 后将数据写入文件 ,其中 N 是另一个参数。因此,在所有试验完成之前不会写入数据。但是通过试验的时间可能会因许多测试参数而异。出于这个原因,如果脚本对于特定参数集花费的时间太长,脚本允许我引发 KeyboardInterrupt 错误 (Ctrl+C) 并在终止之前写入到目前为止获得的数据。
但是,通过使用 GNU Parallel,使用 Ctrl+C 将终止并行命令,并完全停止 Python 作业,因此到目前为止没有数据被写入。
是否可以在这些 Python 脚本中引发 KeyboardInterrupt 以让它们在并行被终止之前完成错误处理?理想情况下,它会像 1. 执行 parallel python script.py ::: args
,2. 一段时间后,使用 Ctrl+C 取消,3. Parallel 告诉 Python 脚本查看 KeyboardInterrupt(或任何错误,它没关系)并且并行暂停等待 Python 个作业完成处理,4. 并行终止,5. 我有包含当时获得的数据的文件。
注意:我想要一个不要求重写Python脚本的数据写入方法的答案。
我相信您正在寻找 --termseq
。 myprog.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 Parallel 接收到 ctrl-c 时,它将发送 SIGTERM
到 child,等待 2000 毫秒,如果 child还活着杀了child.
稍等几秒后按ctrl-c
如果您完全确定 Python 程序会在收到 SIGTERM
后退出,那么您可以删除 ,KILL,20
。如果 Python 程序由于某种原因卡住,这只是一个回退。