Можно ли ограничить время, в течение которого пользовательский код работает в JRuby?Ограничение времени выполнения кода пользователя (JRuby)
ответ
Не знаю, как вы встраивание кода на Ruby, но вы можете легко иметь таймер нить фона, который оценивает
raise YourTimeLimitExceededException, 'no more time'
после определенного периода времени. Вы также хотите отключить Thread.new и Thread.start (а также java.lang.Thread.new) для кода пользователя, или они могут легко обойти ваш таймер.
Можете ли вы подробнее рассказать о своем ответе? (Я использую JRuby-embed) – instantsetsuna
Имейте фоновый поток, чтобы измерить потраченное время и вызовите 'scriptingContainer.evalScriptlet (« raise Timeout :: Timeout »)' из потока таймера. Вы можете использовать фьючерсы java.util.concurrent, чтобы помочь убедиться, что таймаут не поднят, если скрипт завершится вовремя. –
Спасибо за ответ, я посмотрю! :) – instantsetsuna
Извините за туманность. Пользователь предоставил рубиновый код в моем приложении Java, поэтому мне нужен способ запустить его только в течение определенного времени. Это необходимо, потому что пользователь может написать код, который приводит к бесконечным циклам, которых следует избегать. – instantsetsuna
Я не знаю, как это сделать на Java, но в Ruby вы можете сделать это с помощью библиотеки Timeout: http://www.ruby-doc.org/stdlib-1.9.3/libdoc/timeout/rdoc/Timeout. html –