最近、私はオンラインジャッジシステム(spojのような)を開発する計画を立てました。そして、Pythonでジャッジスクリプトを作成しました。送信されたコードを1つ受け取るたびにフォークし、コードをコンパイルして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
、私は、サブプロセスが900Kであるのに対し、フォークされたpythonプロセスのメモリ使用量は12Mであることを発見しました。私のコードに何か問題がありますか?英語が下手でごめんなさい。