JRuby - остановка выполнения скрипта - PullRequest
3 голосов
/ 04 марта 2011

Есть ли способ остановить скрипт после того, как он был выполнен определенное количество времени?

Ответы [ 3 ]

0 голосов
/ 05 марта 2011

У меня такой же вопрос.Мой текущий подход выглядит следующим образом (и не работает должным образом ...):

// jruby-complete-1.6.0.RC2.jar
import org.jruby.Ruby;

class JRubyStop {
    public static void main(String[] args) throws InterruptedException {
        final Ruby jruby = Ruby.newInstance();
        Thread jrubyThread = new Thread() {
            public void run() {
                String scriptlet = "for i in 0..100; puts i; sleep(1); end";
                jruby.evalScriptlet(scriptlet);
            }
        };
        jrubyThread.start();
        Thread.sleep(5000);
        System.out.println("interrupt!");
        jrubyThread.interrupt();
        System.out.println("interrupted?!");
    }
}

После вывода «interrupted ?!»поток все еще работает, пока не закончится скриптлет.

Редактировать: Преобразованный пример Groovy в Java SSCCE (http://sscce.org/).

0 голосов
/ 08 ноября 2016

супер поздний ответ, но это то, что я использую:

require 'timeout'
status = Timeout::timeout(5) 

{
  # Something that should be interrupted if it takes more than 5 seconds...
}
0 голосов
/ 05 марта 2011

Это довольно неопределенный вопрос.Вот несколько идей, которые приходят на ум:

  1. Использование оболочки в качестве процесса управления.Запустите скрипт JRuby, отправьте его в фоновый режим, спите в течение определенного времени, затем убейте $!.
  2. . В начале вашего скрипта JRuby создайте поток, который спит в течение фиксированного периода времени.и затем уничтожьте весь сценарий.
  3. Если вы используете встроенный JRuby, вы можете использовать потоки Java, чтобы делать именно то, что вы хотите.
...