Я написал скрипт на python, который выполняет поток и ожидает его завершения.Внутри потока выполняется subprocess.call, который распаковывает большой zip-файл.Если я убиваю процесс планировщика задач, основной скрипт Python уничтожается, но потоки сохраняются, а файлы продолжают разархивироваться.
При настройке потока я пытался включить протектор как демон, а не какдемон.Даже при использовании сценария в качестве демона при выборе «Конец» в планировщике задач Windows потоки сохраняются, а файлы разархивируются.
Я уже пытался использовать как subprocess.call, так и subprocess.check_call длязадача в потоке.Казалось, ни один из них не имеет значения.
Я также пытался добавить sigint в код python, чтобы планировщик задач позволил сценарию корректно завершить работу и завершить все процессы, но, похоже, это не так.работая или даже вводя обработчик сигнала в планировщике задач.
Основной код Python:
def signal_handler(sig, frame):
logger.log_and_print("Process manually exited!")
logger.log_and_print("Going to clean up.")
shutil.rmtree(tmpWorkingDir)
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
test_thread = Thread(target=doSomething, args=(zipFile, finalDest))
test_thread.daemon = True;
test_thread.start()
Другой код Python:
def doSomething(file_name, final_destination):
decompressFiles(file_name, final_destination)
# other stuff happens here but still continues if main python killed
def decompressFiles(file_zip, destination_dir):
import subprocess
subprocess.call(r'"C:\Program Files\7-Zip\7z.exe" x ' + file_zip+ ' -o' + destination_dir, shell=False)
Когда я запускаю этот скрипт,если я вручную выберу «Конец» в планировщике задач Windows, я хочу, чтобы скрипт корректно завершал работу и убивал его подпроцессы.Вместо этого он не может уничтожить потоки / подпроцессы, а также не может очистить после себя.Оставив эти файлы zip позади, вы быстро заполняете диск.