可以对子进程调整优先级吗?
我知道有一个叫做 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.Popen
的 preexec_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)