os.nice()
親プロセスに最適であることは知っていますが、子サブプロセスを削除する必要があります。私はこれを行う方法を見つけましたが、それはあまり便利ではなく、過度すぎるようです:
os.system("renice -n %d %d" % ( new_nice, suprocess.pid ) )
そして、それは、レニック後に結果として得られる素晴らしいレベルに戻りません。
Pythonでサブプロセスを削除するためのよりクリーンな方法はありますか?
os.nice()
親プロセスに最適であることは知っていますが、子サブプロセスを削除する必要があります。私はこれを行う方法を見つけましたが、それはあまり便利ではなく、過度すぎるようです:
os.system("renice -n %d %d" % ( new_nice, suprocess.pid ) )
そして、それは、レニック後に結果として得られる素晴らしいレベルに戻りません。
Pythonでサブプロセスを削除するためのよりクリーンな方法はありますか?
preexec_fn
次のパラメータを使用しますsubprocess.Popen
。
が呼び出し可能オブジェクトに設定されている場合
preexec_fn
、このオブジェクトは、子プロセスが実行される直前に子プロセスで呼び出されます。(Unix のみ)
例:
>>> Popen(["nice"]).communicate()
0
(None, None)
>>> Popen(["nice"], preexec_fn=lambda : os.nice(10)).communicate()
10
(None, None)
>>> Popen(["nice"], preexec_fn=lambda : os.nice(20)).communicate()
19
(None, None)
subprocess.Popen
の代わりに を使用os.system
して、sys.stdout に出力された結果にアクセスできるようにする必要があります。IIRC ではos.system
、戻り値へのアクセスのみが許可されます。これはおそらく '0' であり、ナイス レベルではありません。
reniceは通常、 set/ getpriorityによって実装されますが、これは python os または posix モジュールには組み込まれていないようです (まだ?)。したがって、renice システム コマンドを呼び出すことが、現時点で最善の策のように思えます。
別の方法として、子プロセスを作成する前に親を os.nice にすることもできます (親の nice 値を継承します)。
過去にCLIでpythonスクリプトを作成しました。ここで見つけることができます: https://github.com/jedie/python-code-snippets/blob/master/CodeSnippets/renicall.py
適切な権利がなければ、あなたは一方向でしか手放すことができません