11

os.nice()親プロセスに最適であることは知っていますが、子サブプロセスを削除する必要があります。私はこれを行う方法を見つけましたが、それはあまり便利ではなく、過度すぎるようです:

os.system("renice -n %d %d" % ( new_nice, suprocess.pid ) )

そして、それは、レニック後に結果として得られる素晴らしいレベルに戻りません。

Pythonでサブプロセスを削除するためのよりクリーンな方法はありますか?

4

6 に答える 6

15

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)
于 2010-03-18T13:22:10.027 に答える
2

subprocess.Popenの代わりに を使用os.systemして、sys.stdout に出力された結果にアクセスできるようにする必要があります。IIRC ではos.system、戻り値へのアクセスのみが許可されます。これはおそらく '0' であり、ナイス レベルではありません。

于 2010-03-17T15:37:02.323 に答える
2

reniceは通常、 set/ getpriorityによって実装されますが、これは python os または posix モジュールには組み込まれていないようです (まだ?)。したがって、renice システム コマンドを呼び出すことが、現時点で最善の策のように思えます。

別の方法として、子プロセスを作成する前に親を os.nice にすることもできます (親の nice 値を継承します)。

于 2010-03-17T15:38:39.433 に答える
1

過去にCLIでpythonスクリプトを作成しました。ここで見つけることができます: https://github.com/jedie/python-code-snippets/blob/master/CodeSnippets/renicall.py

于 2011-11-17T10:15:44.407 に答える
1

適切な権利がなければ、あなたは一方向でしか手放すことができません

于 2010-03-17T16:32:16.340 に答える