Python 沙盒外壳程序按时完成
我正在为一个Python编程课程编写一个评分机器人,学生的提交可能会无限循环。我想对他们的程序执行一个shell调用,这样它的运行时间就不会超过特定的时间。我想跑步,比如说Python 沙盒外壳程序按时完成,python,shell,sandbox,Python,Shell,Sandbox,我正在为一个Python编程课程编写一个评分机器人,学生的提交可能会无限循环。我想对他们的程序执行一个shell调用,这样它的运行时间就不会超过特定的时间。我想跑步,比如说 restrict --msec=100 --default=-1 python -c "while True: pass" 如果程序运行时间超过100ms,则返回-1,否则返回已执行表达式的值(在本例中为python程序的输出) Python内部是否支持这一点?我也在用Perl编写分级机器人,因此我可以使用一些围绕shel
restrict --msec=100 --default=-1 python -c "while True: pass"
如果程序运行时间超过100ms,则返回-1,否则返回已执行表达式的值(在本例中为python程序的输出)
Python内部是否支持这一点?我也在用Perl编写分级机器人,因此我可以使用一些围绕shell脚本调用的Perl模块。用于调用学生函数(foo
,在下面的示例中)。如果在0.1秒或更短时间内返回,则使用带超时的获取结果,否则get
引发超时错误:
import multiprocessing as mp
import time
import sys
def foo(x):
time.sleep(x)
return x*x
pool = mp.Pool(1)
for x in (0.01, 1.0):
try:
result = pool.apply_async(foo, args = (x,)).get(timeout = 0.1)
except KeyboardInterrupt:
pool.terminate()
sys.exit("Cancelled")
except mp.TimeoutError:
print('Timed out')
else:
print "Result: {r}".format(r = result)
或者,如果学生提交脚本而不是函数,那么您可以使用。标准方法是执行以下操作
下载允许对子流程进行每个状态检查的模块时,您会非常高兴。了解python很好,但我最终使用了一个脚本,该脚本允许我在不增加python开销的情况下执行操作: