ruby - Ruby and Threads - 为什么我的脚本没有完成?
问题描述
我有一个脚本,它使用 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}
解决方案
您可以通过 限制允许线程运行的时间量,如果达到超时时线程仍在运行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)
推荐阅读
- python - 读取 PDF 文件并使用正则表达式过滤内容
- python - 使用数据透视表的两个变量之间的 DataFrames 比率
- python - 删除字符串中的“\n”
- routes - 子路由弹出时 Flutter SharedPreference 更新
- angular - Angular:“AppRoutingModule”被忽略并且路由不起作用
- python - Resty解析器问题Python
- node.js - 在 node js 中声明 var 的正确方法是什么?
- php - 使用多维数组中的值重新索引数组
- android - RecyclerView中的Android DataBinding项目位置
- sql - MS Access:从 SQL 传递组合框值