Я использую 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 сразу выйдут, но это выглядит довольно радикально.
Я использую SCons 3.0.1 и Python 3.6.5 под Ubuntu 18.04.
Вот минимальный файл 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', [])