我知道os.nice()
它对父进程非常有用,但我需要对子进程进行重新编写。我找到了这样做的方法,但似乎不是很方便和过分:
os.system("renice -n %d %d" % ( new_nice, suprocess.pid ) )
在重新加工后,它不会返回产生良好的水平。
在python中有更简洁的方法来管理子进程吗?
答案 0 :(得分:13)
使用subprocess.Popen
的preexec_fn
参数:
如果将
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)
答案 1 :(得分:2)
您应该使用subprocess.Popen
而不是os.system
,这样您就可以访问打印到sys.stdout的任何结果。 IIRC,os.system
只允许您访问返回值,该值可能为“0”而不是很好的级别。
答案 2 :(得分:2)
renice通常由set / getpriority实现,它似乎没有进入python os或posix模块(但是?)。所以调用renice系统命令似乎是你现在最好的选择。
作为替代方案,您可以在创建子进程之前对父进程进行操作 - 这将继承其父进程的良好值 - 并在创建子进程后再次返回os.nice。
答案 3 :(得分:1)
如果没有适当的权利,您只能以一种方式进行租借
答案 4 :(得分:0)
我以前用CLI创建了一个python脚本。您可以在此处找到它:https://github.com/jedie/python-code-snippets/blob/master/CodeSnippets/reniceall.py
答案 5 :(得分:0)
renice通常由set / getpriority实现,它似乎没有进入python os或posix模块(但是?)。所以调用renice系统命令似乎是你现在最好的选择。
扩展Daniel关于from django.shortcuts import render
from contracts.forms import GenerateContract
# Create your views here.
def index(request):
return render(request, 'contracts/index.html')
def contractview(request):
form = GenerateContract()
if request.method == "POST":
form = GenerateContract(request.POST)
if form.is_valid():
saved_instance = form.save(commit=True)
return render(request,'contracts/contracts.html',{'form':GenerateContract(instance=saved_instance)})
else:
print('ERROR')
return render(request,'contracts/contracts.html',{'form':form})
的评论:
ctypes
结果:
from ctypes import cdll
libc = cdll.LoadLibrary("libc.so.6")
for pid in pids:
print("old priority for PID", pid, "is", libc.getpriority(0, pid))
libc.setpriority(0, pid, 20)
print("new priority for PID", pid, "is", libc.getpriority(0, pid))