温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - How to pass back data from forks through memory instead of having to write files in Ruby?
fork ruby

其他 - 如何从叉子通过内存传回数据,而不必在Ruby中写文件?

发布于 2020-03-31 23:13:31

由于特定原因,我必须坚持使用MRI Ruby。我需要真正的并行性而不是绿色线程,因此我使用了效果很好的fork。但是我找不到一种方法可以通过内存将信息从派生进程内部传递回主进程,而不必将数据写入外部文件。

如何在以下代码中有效地更改数据?我想从fork内部将数据添加到全局数组:

$data = []

4.times {
    Process.fork {
        $data << rand
    }
}

Process.waitall
p $data

如果没有办法将数据传递回去,那么是否有任何我可以从Ruby开始而无需在底层操作系统中安装任何东西的内存缓存解决方案?宝石也会为我工作。谢谢。

查看更多

提问者
horv77
被浏览
112
horv77 2020-03-31 01:25

好吧,我已经设法使用并行gem解决了另一种问题:

https://github.com/grosser/parallel

gem并行安装

require "parallel"

# passing data to 3 processes
data = [ 1, 2, 3 ]

result = Parallel.map( data ){|d|
    # some expensive computation ...
    d ** 3
}

p result

[1、8、27]