我的主要功能是里面有一个基本的循环。我想为循环的每次迭代触发一个子进程(它会执行 HTTP 请求,稍后会详细介绍)。
如果我使用进程,我的问题是看起来每个子进程都在继续执行主线程,而我只希望主进程在循环之后继续,而子进程在 HTTP req 完成后死亡。主进程没有兴趣让每个子进程完成后再继续。
现在看起来像这样:
data.each do |k, v|
(pid = fork) ? Process.detach(pid) : doHttpQuery(v + ":" + "k")
end
# code after this comment should only get executed once
此外,当流程完成时,我得到了这个
thread.rb:189:in `sleep': deadlock detected (fatal)
如果我使用这样的线程
threads << Thread.new { doHttpQuery(v + ":" + "k")}
接着
threads.each { |thr| thr.join }
线程被触发,但由于某种原因,它实际上并没有执行 HTTP 请求,整个过程就停止了。