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