2009-10-22 113 views
0

用户正在Java GUI python-editor中输入python脚本,并且可以从编辑器运行该脚本。有没有办法接受用户的脚本,并对整个脚本强加时间限制?我很熟悉如何使用函数/ signal.alarm(但我在Windows & unix Jython)但我唯一的解决方案是将脚本放在另一个脚本的方法中我使用setTrace()函数,但删除了其中全局变量值持续存在的“特征”。即。如何在Python中对整个脚本施加时间限制

try: 
i+=1 
except NameError: 
i=0 

'i'的值在每次执行时递增1。

回答

4

使用threading.Timer到指定的延迟(你想要的最大持续时间为你的程序)后运行在单独的线程的功能,并且在功能使用thread.interrupt_main(注意这是在模块thread模块threading! )在主线程中引发KeyboardInterrupt异常。

如果需要,一个更可靠的方法(如果脚本被嵌入到一些不可中断的非Python代码中,以便忽略键盘中断)是产生一个“看门狗进程”来非常有力地杀死错误脚本(这样做以及上述方法,并稍晚于上面使用的延迟,让脚本有机会运行它的析构函数,atexit函数等,如果可行的话)。

+0

谢谢!我不是一个高级的python用户,但我会试着让这个工作。 – Leonidas 2009-10-23 16:24:28

+0

啊我使用的是Jython 2.1,所以thread.interrupt_main()不起作用! – Leonidas 2009-10-23 18:43:49

+0

@Leonidas,我不确定Java或Jython线程如何最好地中断(干净地,即,所有终结器,并尝试/最终运行等)整个过程。那么java.lang.System.exit(1)...? – 2009-10-23 23:50:44

0

这只是一个猜测,但也许包含线程或多处理?有一个计时器线程在超时时将其杀死。

相关问题