2010-08-02 36 views
1

是否可以限制用戶代碼在JRuby中運行的時間量?限制用戶代碼的執行時間(JRuby)

+0

對不起,模糊不清。用戶提供的ruby代碼正在我的Java應用程序中運行,所以我需要一種方法來運行它只有一段特定的時間。這是需要的,因爲用戶可能會編寫導致無限循環的代碼 - 應該避免。 – instantsetsuna 2010-08-02 10:27:43

+0

我不知道如何在Java中做到這一點,但在Ruby中,你可以用Timeout庫做到這一點:http://www.ruby-doc.org/stdlib-1.9.3/libdoc/timeout/rdoc/Timeout。 html – 2012-09-18 03:56:27

回答

2

不知道你是如何嵌入Ruby代碼,但是你可以很容易有一個背景計時器線程,經過一段時間後評估

raise YourTimeLimitExceededException, 'no more time' 

。你也想爲用戶代碼禁用Thread.new和Thread.start(以及java.lang.Thread.new),否則他們可能很容易繞過你的計時器。

+0

您能否詳細說明您的答案? (我正在使用JRuby嵌入) – instantsetsuna 2010-08-16 04:46:42

+0

有一個後臺線程測量花費的時間,並從計時器線程調用'scriptingContainer.evalScriptlet(「raise Timeout :: Timeout」)''。您可以使用java.util.concurrent futures來幫助確保在腳本及時完成時不會超時。 – 2010-08-16 20:54:11

+0

感謝您的回答,我會研究它! :) – instantsetsuna 2010-08-18 04:54:57