私は、Pythonのサブプロセスの特定のセットをできるだけ影響の少ないものにしたいと思います。私は既にniceを使ってCPU消費を制限しています。しかし理想的にはI/Oも制限されます。 (懐疑的であれば、私にユーモアを与えて、これを行うことに価値があると仮定してください;実行にどれくらい時間がかかりますか、それらの多くがある可能性があります。同じマシンなど)PythonプロセスのI/O消費を制限する方法(おそらくioniceを使用しています)?
ionice
の可能性があります。 ionice
を呼び出すための既存のPythonパッケージはありますか(Googleは何も出せませんでした)? 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
クールな修正は、OSXで利用できるようにしたいと考えています。 –
ええええええええええええと、OSXはそれをネイティブに公開していません。 –
ブロックデバイスにCFQスケジューラがあることを確認してください。それ以外の場合は動作しません。 – Zorg