Is it possible to renice a subprocess?

nice, python, renice, subprocess

Solution

Use the `preexec_fn` parameter of `subprocess.Popen`:

If `preexec_fn` is set to a callable object, this object will be called in the child process just before the child is executed. (Unix only)

Example:

>>> 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)

Problem

I know about `os.nice()` it works perfect for parent process, but I need to do renice of my child subprocesses. I found way to do this, but it seems to be not very handy and too excessive: ``` os.system("renice -n %d %d" % ( new_nice, suprocess.pid ) ) ``` And it isn't return resulting nice level after renicing. Is there more clean way to renice subprocesses in python?

Original source