我正在使用SCons管理执行长计算的Python函数long_task()。如果我直接从脚本中调用long_task(),则可以使用Ctrl-C中断它。但是,如果SCons正在运行long_task()并按Ctrl-C,则long_task()会继续运行直到完成,然后 then SCons会说“构建中断。由于错误而终止了构建”。在这种情况下,有没有办法让Ctrl-C立即停止long_task()?
如果我在long_task()中使用信号处理程序来处理SIGINT,则它会按照我想要的方式运行,但是我宁愿不必在多个此类长任务中的每一个中执行此操作。 如果我按Ctrl- \,则longtask()和SCons都将立即退出,但这似乎太过激烈了。
我正在Ubuntu 18.04下使用SCons 3.0.1和Python 3.6.5。
这是最小的SConstruct文件:
#!/usr/bin/env python3
import time
def long_task(target, source, env):
print('Starting long task')
# Mimic a complex calculation
for i in range(100):
time.sleep(0.1)
print('Finishing long task')
TestBuilder = Builder(action = long_task)
env = Environment(BUILDERS = {'TestBuild': TestBuilder})
env.TestBuild('dummy', [])
答案 0 :(得分:0)
我强烈建议您不要将长时间运行的python逻辑作为生成器中的操作来运行。 而是通过shell作为独立的python程序运行它。 这也简化了在此类程序中建立时间限制的过程,因此它不会永远运行。
在SCons中运行长时间运行的python逻辑将限制并行构建。
基本上就是不做。
(顺便说一句,我是SCons项目联合经理)