如何中断SCons管理的长任务?

问题描述 投票:0回答:1

我正在使用SCons来管理执行长计算的Python函数long_task()。如果我直接从脚本调用long_task(),那么我可以用Ctrl-C中断它。但是,如果SCons运行long_task()并按Ctrl-C,则long_task()继续运行直到完成,然后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', [])
python scons
1个回答
0
投票

我强烈建议您不要将长时间运行的python逻辑作为构建器中的操作。而是通过shell作为一个独立的python程序运行它。这也简化了为这样的程序构建时间限制,因此它不会永远运行。

在SCons中运行长时间运行的python逻辑将限制并行构建。

基本上就是不要这样做..

(顺便说一下。我是SCons项目联合经理)

© www.soinside.com 2019 - 2024. All rights reserved.