在 Ruby 中处理多个进程

Posted

技术标签:

【中文标题】在 Ruby 中处理多个进程【英文标题】:Working with multiple processes in Ruby 【发布时间】:2010-10-17 04:23:31 【问题描述】:

是否有一个 Ruby 模块可以轻松地在多个进程之间共享对象?我正在寻找类似于 Python 的 multiprocessing 的东西,它支持可以在进程之间共享的进程安全队列和管道。

【问题讨论】:

【参考方案1】:

将 DRb(提供简单的进程间通信)与 Queue 或 SizedQueue(它们都是线程安全队列)结合起来,应该可以满足您的需求。

您可能还想查看同样托管在 github 上的 beanstalkd

【讨论】:

【参考方案2】:

我已经遇到过这个库,但我还没有尝试过。

Parallel::ForkManager — 一个简单的并行处理分支管理器。

http://parallelforkmgr.rubyforge.org/

【讨论】:

【参考方案3】:

我认为您可以使用 Ruby IO 的功能做很多您想做的事情;您是在进程而不是线程之间共享,对吗?

如果是这样,IO.pipe 将满足您的需求。 Ruby 没有任何内置的方式来处理跨进程队列(据我所知),但您也可以使用 FIFO(如果您使用的是 Unix)。

如果您想要更细粒度的东西,并具有良好的线程支持,我相当肯定如果您使用 JRuby,您可以搭载 java.util.concurrent。 MRI 的线程/并发支持非常糟糕,所以如果这是您的目标,JRuby 可能是一个更好的选择。

【讨论】:

我在 perl 和 ruby​​ 中都使用过它。真是太棒了。

以上是关于在 Ruby 中处理多个进程的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 多线程

如何隔离 Ruby 中的方法 - 多处理问题

雷林鹏分享:Ruby 多线程

ruby 证明在ruby进程中执行的系统命令将此进程作为父进程并具有其所有环境变量

多处理:如何在多个进程之间共享一个字典?

更改顶部的 ruby​​ 进程名称