Ruby使用多线程运行两个脚本

时间:2018-04-22 13:18:38

标签: ruby multithreading concurrency rubygems sinatra

所以我试图通过终端的一次调用运行我的ruby(无轨道)应用程序,即' ruby​​ run.rb '。但是我有两个需要运行的脚本, app.rb app2.rb ,问题是,这两个脚本都没有完成 - 它们继续运行为了保持系统运行,这意味着其中一个脚本永远不会运行 - 它调用第一个脚本(app.rb),而第二个脚本(app2.rb)不需要同时运行这些脚本!

当我打开另一个命令行并且只在每个命令行中运行一个脚本时,它确实有效。

我试过了:

def runApp
    system("ruby app.rb")
end
def runApp2
    system("ruby app2.rb")
end
t1 = Thread.new{runApp()}
t2 = Thread.new{runApp2()}
t1.join
t2.join

然而,这只会运行第一个线程(运行app.rb的线程),因为它一直在运行。任何想法如何也可以同时运行第二个线程?

:编辑:其中一个脚本使用 Sinatra gem ,另一个脚本每十秒调用一次其中一个函数。

2 个答案:

答案 0 :(得分:0)

所以我找到的一个可能的解决方案是

for ($i = 0; $i < 10; $i++) if ($i % 2 == 0) echo $i;

这只适用但是如果从linux运行我想也是如此,我仍然会欣赏任何进一步的解决方案。

答案 1 :(得分:0)

根据documentation你可以这样做:

threads = []
threads << Thread.new{runApp()}
threads << Thread.new{runApp2()}

threads.each { |thr| thr.join }

我想这可行,因为each是平行的。