Я хотел бы, чтобы определенный набор подпроцессов Python был как можно более низким. Я уже использую nice, чтобы ограничить потребление ЦП. Но в идеале ввод-вывод также будет ограничен. (Если скептически, пожалуйста, юмористируйте меня и предположите, что есть ценность в этом, неважно, сколько времени они будут выполнять, их может быть много, и есть более высокоприоритетные вещи (обычно), происходящие на тот же компьютер и т.д.)
Возможна одна возможность ionice
. Существуют ли какие-либо существующие пакеты Python для вызова ionice
(Google ничего не обнаружил)? Нетрудно написать код, чтобы просто запустить команду ionice
; но я бы предпочел не писать код, который кто-то еще написал/протестировал; иногда есть тонкие случаи кросс и т.д. И есть ли лучший способ ограничить потребление I/O?
справочная страница для ионики предполагает, что значение ionice
может зависеть от значения nice
, но запуск этого Python 2.6 script, как представляется, опровергает это, даже для дочерних процессов, где наследуется значение 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