JRuby - 停止脚本执行

时间:2011-03-04 05:56:21

标签: jruby

有没有办法在执行特定时间后停止脚本?

3 个答案:

答案 0 :(得分:0)

这是一个相当模糊的问题。以下是一些想法:

  1. 使用shell作为控制过程。启动JRuby脚本,将其发送到后台,休眠一段时间,然后终止$!
  2. 在JRuby脚本的开头,创建一个休眠一段固定时间的线程,然后终止整个脚本。
  3. 如果您使用的是嵌入式JRuby,则可以使用Java的线程来完成您想要的操作。

答案 1 :(得分:0)

我有同样的问题。我目前的方法看起来像这样(并没有按预期工作......):

// 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?!");
    }
}

输出后“中断?!”线程仍然运行直到scriptlet结束。

编辑:将Groovy示例转换为Java SSCCE(http://sscce.org/)。

答案 2 :(得分:0)

超级迟到的答案,但这是我使用的:

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

{
  # Something that should be interrupted if it takes more than 5 seconds...
}