可以对子进程调整优先级吗?

13 投票
7 回答
6408 浏览
提问于 2025-04-15 20:31

我知道有一个叫做 os.nice() 的东西,它在父进程中工作得很好,但我需要调整我子进程的优先级。我找到了一种方法可以做到这一点,但感觉有点麻烦,而且步骤太多了:

os.system("renice -n %d %d" % ( new_nice, suprocess.pid ) )

而且在调整优先级后,它并没有返回调整后的优先级等级。

有没有更简单的方法可以在Python中调整子进程的优先级呢?

7 个回答

2

你应该用 subprocess.Popen 来代替 os.system,这样你就可以获取到打印到系统输出的任何结果。记得没错的话,os.system 只会给你返回一个值,这个值通常是 '0',而不是你想要的详细信息。

2

renice 通常是通过 set/getpriority 来实现的,但这似乎还没有被加入到 Python 的 os 或 posix 模块中(至少目前还没有)。所以现在调用 renice 系统命令可能是最好的选择。

另外,你也可以在创建子进程之前先用 os.nice 调整一下父进程的优先级,这样子进程就会继承父进程的优先级值。创建完子进程后,再把父进程的优先级值改回去。

18

使用 subprocess.Popenpreexec_fn 参数:

如果 preexec_fn 被设置为一个可调用的对象(也就是说可以被调用的函数或方法),那么这个对象会在子进程执行之前被调用。(仅限于Unix系统)

示例:

>>> Popen(["nice"]).communicate()
0
(None, None)
>>> Popen(["nice"], preexec_fn=lambda : os.nice(10)).communicate()
10
(None, None)
>>> Popen(["nice"], preexec_fn=lambda : os.nice(20)).communicate()
19
(None, None)

撰写回答