如何在Python脚本中设置时间限制
用户正在一个Java图形界面的Python编辑器中输入Python脚本,并且可以直接在编辑器中运行这个脚本。有没有办法给用户的脚本设置一个总的时间限制呢?
我知道如何通过函数和signal.alarm来实现这个功能(不过我是在Windows和Unix的Jython环境下),但我想到的唯一解决办法是把这个脚本放在另一个脚本中的一个方法里,然后使用setTrace()函数。但这样做就失去了一个“特性”,就是全局变量的值不会保持。例如:
try:
i+=1
except NameError:
i=0
变量'i'在每次执行时都会增加1。
2 个回答
0
这只是我的一个猜测,但也许可以用线程或多进程来处理?可以创建一个定时线程,当超时时就把它结束掉。
4
使用一个叫做 threading.Timer 的东西,可以让你在指定的延迟时间后,在一个单独的线程中运行一个函数。这段延迟时间就是你希望程序运行的最长时间。在这个函数里,你可以用 thread.interrupt_main
(注意,这个是在 thread
模块里,而不是在 threading
模块里!)来在主线程中引发一个键盘中断的异常。
还有一种更稳妥的方法(假如脚本卡在一些无法中断的非Python代码里,导致它忽略键盘中断)是启动一个“监视进程”,如果需要的话,可以非常强制地结束那个出错的脚本(这样做要和上面的方法一起使用,并且在你设定的延迟时间稍晚一点,这样可以给脚本一个机会去运行它的清理函数、退出函数等,如果有可能的话)。