最近我计划开发一个在线裁判系统(如spoj)。我已经用python编写了一个判断脚本。它每收到一个提交的代码就分叉,然后编译代码并用于subprocess.Popen
启动程序。但是当我使用 获取程序的内存使用情况时resource.getrusage(resource.RUSAGE_CHILDREN)
,它会返回分叉的 python 进程而不是子进程的内存。
下面是我的一些代码:
try:
programThread = subprocess.Popen(command, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, preexec_fn = self.limit, bufsize = -1)
except OSError:
self.status.value = -2
return -2
self.JudgeID.value = programThread.pid
programOutput = programThread.communicate(_in)
self.status.value = 0
Res = resource.getrusage(resource.RUSAGE_CHILDREN)
self.cpuusage.value = Res.ru_utime + Res.ru_stime
self.memoryusage.value = Res.ru_maxrss * resource.getpagesize()
cpuusage
并且memoryusage
是由 创造的共享内存multiprocessing.Value
,其值为memoryusage
12M。但是通过top
,我发现,分叉的python进程的内存使用量是12M,而子进程是900K。我的代码有什么问题吗?对不起,我的英语不好。