我有一个脚本,可以使用Thread远程为集群配置节点,这样我就可以一次完成所有这些节点。
有没有更好的方法可以做到这一点,所以我得到一个返回代码,一个干净的退出,以及一个似乎没有运行一段时间的脚本?
@threads = []
def process_node(apps_to_close, node)
@threads << Thread.new do
puts "now processing node #{node}\n"
...
end
end
nodes.each do |node|
process_node(apps_to_close, node)
end
@threads.each {|thr| thr.join}
答案 0 :(得分:1)
您可以通过join
限制允许线程运行的时间,如果线程在达到超时时仍在运行,则返回nil
。所以你可以把它重写为:
...
results = @threads.collect { |thr| thr.join(1) } # wait 1 second for thread
@threads.each { |t| Thread.kill(t) }
results.any?(&:nil?) ? exit(1) : exit(0)