Ruby 1.8线程如何在Phusion Passenger中运行?

时间:2011-10-25 14:58:12

标签: ruby multithreading passenger

如果我在控制器动作中触发了1或1000个:

Thread.new {
  # do some stuff
}
  1. 他们确实会与http请求异步运行吗?
  2. 如果引发异常,它会在哪里涓涓细流?
  3. 还有什么我应该知道的吗?

1 个答案:

答案 0 :(得分:0)

线程和异常不一定是朋友,因为异常不能从当前线程中消失并警告父线程。您还需要启用线程异常通知,否则您将永远不会听到它们:

Thread.new do
  Thread.abort_on_exception = true
end

您还需要在每个新帖子上调用Thread.join,否则主要人员会在没有它们的情况下快速调用。

这样你的代码至少会停止一个异常,而不是简单地终止生成一个异常的线程,并继续进行,好像什么也没发生过一样。

确保您在线程中调用的内容是线程安全的,否则可能会出现意外结果。