Запустить подпроцесс на высоком уровне - PullRequest
0 голосов
/ 30 октября 2019

Мне нужно запустить JAR-файл из моего скрипта Python, который должен соответствовать некоторым требованиям реального времени (это программист).

В настоящее время я занимаюсь

import subprocess

process = subprocess.Popen(shlex.split("java programmer.jar"), stdout=subprocess.PIPE)

, но программистрегулярно глохнет, что не произойдет, если я запусту его вручную, используя start /high java programmer.jar. Так что я хотел бы также как-то установить приоритет подпроцесса непосредственно из моего скрипта на python. Но если использовать команду выше, я получу FileNotFoundError, поэтому Google сказал мне, что я должен использовать флаг shell=True. Это решило мою проблему, но создало новую, так как у меня теперь работает jar в другой оболочке, поэтому я больше не могу анализировать stdout того, что мне нужно сделать, чтобы предпринять какие-то действия.

Так есть ли способлибо запустить subprocess напрямую с более высоким приоритетом, либо перенаправить консольный вывод оболочки, которую он создает при запуске

process = subprocess.Popen(shlex.split("java programmer.jar"), stdout=subprocess.PIPE, shell=True)

Это должно выполняться в Windows

1 Ответ

0 голосов
/ 31 октября 2019

Ядро планирует поток с одним из 32 уровней приоритета . Базовый приоритет зависит от приоритета потока относительно класса приоритета процесса:

IDLE_PRIORITY_CLASS = 0x00000040
BELOW_NORMAL_PRIORITY_CLASS = 0x00004000
NORMAL_PRIORITY_CLASS = 0x00000020
ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000
HIGH_PRIORITY_CLASS = 0x00000080
REALTIME_PRIORITY_CLASS = 0x00000100

Класс приоритета реального времени следует использовать только в случае крайней необходимости и только для кратковременных операций. Даже высокоприоритетный класс следует использовать с осторожностью и осторожностью.

Начальный класс приоритета процесса может быть установлен с помощью параметра dwCreationFlags CreateProcessW. subprocess.Popen в Python поддерживает это как параметр creationflags. Для удобства вышеупомянутые константы класса приоритета были добавлены в 3.7 , но, конечно, мы можем использовать эти значения флагов в предыдущих версиях Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...