【发布时间】:2010-12-06 19:01:45
【问题描述】:
我想了解一下使用 fork{} 从 rails 应用程序“后台”处理进程是否是个好主意...
从我收集到的 fork{my_method; Process#setsid} 实际上做了它应该做的事情。
1) 创建另一个具有不同 PID 的进程
2) 不会中断调用过程(例如,它会继续等待 fork 完成)
3) 执行子进程直到它完成
..这很酷,但这是个好主意吗?叉子到底在做什么?它是否会在内存中创建我的整个 rails mongrel/passenger 实例的重复实例?如果是这样那将是非常糟糕的。或者,它是否以某种方式在不消耗大量内存的情况下做到这一点。
我的最终目标是取消我的后台守护程序/队列系统,转而支持分叉这些进程(主要是发送电子邮件)——但如果这不能节省内存,那么这绝对是朝着错误方向迈出的一步
【问题讨论】:
-
我会坚持使用排队系统。如果您为此使用维护良好的软件包,则不必担心分叉炸弹攻击和良好排队系统所需的其他大量细节。在这种情况下,您应该小心滚动自己的代码,除非明确需要这样做。
-
排队服务器++。可能想查看 MQ (github.com/mdarby/mq) 的电子邮件队列。我已经在生产环境中使用了几个月,没有任何问题。
标签: ruby-on-rails ruby background delayed-job backgroundrb