Ruby:并行运行外部进程并跟踪退出代码

时间:2014-05-19 12:11:17

标签: ruby ruby-2.0

我进行了一次冒烟测试,我在对他们的服务器进行了测试。目前它以串行形式运行,每台服务器大约需要60秒。我可以并行运行这些并且我已经使用Thread.new来完成它,这很好,因为它运行得更快但是我忘记了测试是否实际通过了。

我试图通过Process.spawn来管理我的流程来改善这一点。

pids = []
uris.each do |uri|
    command = get_http_tests_command("Smoke")
    update_http_tests_config( uri )
    pid = Process.spawn( system( command ) )
    pids.push pid
    Process.detach pid
end

# make sure all pids return a passing status code
# results = Process.waitall

我想开始我的所有测试,但之后确保所有测试都返回传递状态代码。

我尝试使用Process.waitall,但我认为这是错误的并且用于分叉,而不是产生。

在完成所有过程后,如果所有过程都失败,我希望返回true状态。

Documentation here

1 个答案:

答案 0 :(得分:2)

尝试:

statuses = pids.map { |pid| Process.wait(pid, 0); $? }

等待每个流程ID完成,并检查每个流程$?中设置的结果状态