Я занимаюсь переработкой кода Python 2.7 на Python 3 в среде Microsoft Windows 10. Я использую подпроцесс в нескольких сценариях для параллельной обработки вызовов однопоточных приложений. Этот подход очень хорошо работает в версии 2.7, но в Python 3 каждый Popen открывает окно CMD, что очень раздражает, поскольку отвлекает фокус от мыши и клавиатуры; если каждый процесс занимает 10 секунд и выполняется от 5 до 10 тысяч итераций, то в течение следующих 13–26 часов внимание будет украдено, что сделает компьютер практически непригодным для чего-либо еще.
Есть ли что-то, что я могу сделать? Мне не хватает документации, которая бы изменила поведение Popen, чтобы оно просто работало в фоновом режиме, как это было в версии 2.7?
Код:
Код: Выделить всё
ProcSpawned = False
while not ProcSpawned:
for ThisIndex in ThreadRange:
if RunningProcesses[ThisIndex] == None:
ProcSpawned = True # initialized starting value, this slot is free
elif RunningProcesses[ThisIndex].poll() != None:
ProcSpawned = True # this process has terminated, now this slot is free to use
if ProcSpawned:
FullCommand = Prog2Run + TheseIO
RunningProcesses[ThisIndex] = subprocess.Popen(FullCommand,stdout=FNULL, stderr=FNUL2)
break # thread launched, now break out so we don't restart it multiple times
— это исполняемый файл, который обычно запускается в окне CMD, ThisIO — это список параметров, передаваемых в исполняемый файл, FNULL и FNUL2 — это os.devnull потому что мне все равно, какой текст или ошибка он генерирует, поскольку я проверяю наличие сбоев после завершения всех потоков (некоторые исполняемые файлы генерируют сообщения о ходе выполнения на stderr вместо stdout).
Подробнее здесь:
https://stackoverflow.com/questions/783 ... n-python-3