我希望一组特定的Python子进程尽可能低影响 . 我已经在使用nice来帮助限制CPU消耗 . 但理想情况下I / O也会受到限制 . (如果持怀疑态度,请幽默我,并假设这样做有 Value ;无论运行多长时间都没关系,可能会有很多,并且有更高优先级的东西(通常)继续同一台机器等)
一种可能性似乎是 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()
其中有以下输出:
$ uname -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
**** niced to: None ****
*** parent ***
nice: 0
ionice: none: prio 4
*** child ***
nice: 0
ionice: none: prio 4
**** niced to: 19 ****
*** parent ***
nice: 19
ionice: none: prio 4
*** child ***
nice: 19
ionice: none: prio 4
3 回答
psutil公开了这个功能(python 2.4 - > 3.2):
此外,从Python 3.3开始,这也将在python stdlib中提供:http://bugs.python.org/issue10784
嗯 .
作为开始指针,您应该在内核中找到
syscall
编号是ioprio_set
和ioprio_get
系统调用 . 我建议您签入/usr/include/asm/unistd_32.h
或/usr/include/asm/unistd_64.h
,具体取决于您的内核拱;如果不存在,请从syscall(2)
手册页的建议开始,该手册应该是/usr/include/sys/syscall.h
并按照你的方式工作 .鉴于此,你应该使用
ctypes
,àla:就是这样,或多或少 . 玩得开心 :)
为什么不启动任何启动过程对它们进行电离(即用离子电池运行)而不是让它们自身离子化?看起来好多了 .