【发布时间】:2009-03-31 18:23:07
【问题描述】:
我希望一组特定的 Python 子流程的影响尽可能低。我已经在使用nice 来帮助限制 CPU 消耗。但理想情况下,I/O 也会受到限制。 (如果持怀疑态度,请取笑我并假设这样做是有价值的;无论他们运行多长时间,都可能有很多,并且(通常)有更高优先级的事情正在进行同一台机器等)
一种可能性似乎是ionice。是否有任何现有的 Python 包用于调用 ionice(谷歌没有发现任何东西)?编写代码来简单地运行ionice 命令并不难;但我宁愿避免编写其他人编写/测试过的代码;有时会出现微妙的边缘情况等。而且,有没有更好的方法来限制 I/O 消耗?
man page for ionice 表明 ionice 值可能会受到 nice 值的影响,但运行此 Python 2.6 脚本似乎证明了这一点,即使对于继承了 nice 值的子进程也是如此:
#!/usr/bin/env python
import os
import multiprocessing
def print_ionice(name):
print '*** ', name, ' ***'
os.system("echo -n 'nice: '; nice")
os.system("echo -n 'ionice: '; ionice -p%d" % os.getpid())
for niced in (None, 19):
if niced: os.nice(niced)
print '**** niced to: ', niced, ' ****'
print_ionice('parent')
subproc = multiprocessing.Process(target=print_ionice, args=['child'])
subproc.start()
subproc.join()
输出如下:
$ unname -as Linux x.fake.org 2.6.27-11-server #1 SMP Thu Jan 29 20:13:12 UTC 2009 x86_64 GNU/Linux $ ./foo.py **** 很高兴:无 **** *** 家长 *** 不错:0 ionice:无:prio 4 *** 孩子 *** 不错:0 ionice:无:prio 4 **** 很高兴:19 **** *** 家长 *** 不错:19 ionice:无:prio 4 *** 孩子 *** 不错:19 ionice:无:prio 4【问题讨论】:
标签: python linux performance unix