我想了解有关传递给我的Popen包装器方法的wait_thread的更多信息
def my_popen(cmd, ignore_err = true)
Open3.popen3(cmd, {}) do |stdin, stdout, stderr, wait_thr|
cmd_status = wait_thr.value
cmd_output << stdout.read
cmd_output << stderr.read unless ignore_err
end
return cmd_output, cmd_status
end
它适用于短时间运行的进程,但它在Sidekiq工作程序中使用,可能需要大约一个小时。然而,当我计时时,无论工人真正需要多长时间,每次只需要大约30秒。为了计时,我只是在worker的开头向数据库添加一个时间戳条目,然后在最后更新它以保证线程的安全性,这样我就可以在UI中看到它。
这个等待线程是否与大约30秒后超时有关?