2009-10-22 40 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

這只是一個猜測,但也許包含線程或多處理?有一個計時器線程在超時時將其殺死。

相關問題