Планировщик заданий Windows не уничтожает скрипт Python Подпроцессы потоков - PullRequest
0 голосов
/ 14 февраля 2019

Я написал скрипт на 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 позади, вы быстро заполняете диск.

...