以高优先级运行子过程

问题描述 投票:0回答:1

我需要从我的python脚本中运行一个jar文件,该文件必须满足某些实时要求(它是程序员)。

我目前正在做的是

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或重定向我在运行时创建的Shell的控制台输出

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

必须在Windows上运行

python windows subprocess
1个回答
0
投票

内核将线程调度为32 priority levels之一。基本优先级取决于相对于进程优先级类的线程优先级:

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

实时优先级类仅应在绝对必要时使用,并且仅用于短期操作。即使是高优先级的类也应谨慎使用。

可以通过dwCreationFlagsCreateProcessW参数设置进程的初始优先级。 Python的CreateProcessW支持将此作为其subprocess.Popen参数。为了方便起见,上述优先级常量为subprocess.Popen,但是我们当然可以在以前的Python版本中使用这些标志值。

© www.soinside.com 2019 - 2024. All rights reserved.