1

自从我上次查看(例如过时的nws 包)以来已经有一段时间了,所以我想知道在此期间是否“发生了任何事情”。

有没有办法在并行进程之间共享内存?

我希望每个进程都可以访问environment扮演元对象角色的对象。

4

3 回答 3

2

rredis提供的功能类似于nws. 您可以rredisforeachanddoRedis包一起使用,或者与任何其他并行编程包一起使用,例如parallel.

于 2013-06-08T15:30:37.000 回答
1

您可以通过新yaplr软件包有效地做到这一点。

首先安装它

devtools::install_github('adamryczkowski/yaplr')

R会话编号1:

library(yaplr)
send_object(obj=1:10, tag='myobject')
# Server process spawned

R会话编号2:

library(yaplr)
list_objects()
#          size                    ctime
# myobject   62 Sat Sep 24 13:01:57 2016
retrieve_object(tag='myobject')
# [1]  1  2  3  4  5  6  7  8  9 10
remove_object('myobject')
quit_server()

该包bigmemory::big.matrix用于高效的数据传输:在 R 进程之间复制大对象时,不会进行不必要的复制:只有一个序列化和一个反序列化。

不使用网络套接字。

于 2016-09-24T11:42:17.483 回答
1

bigmemory通过包共享矩阵将非常有效地工作。您可以将每个 R 对象序列化/反序列化到这样的矩阵中。

不幸的是,您可以在进程之间共享矩阵的唯一方法是通过它们的描述符,这些描述符不是确定性的(即除非您与其他进程通信,否则您无法获得描述符)。要解决这个先有鸡还是先有蛋的问题,您可以将描述符保存在文件系统上的选定位置。(描述符真的很小,它包含的唯一重要的东西是实际 bigmatrx 的内存地址)。

如果您仍然感兴趣,我可以发布 R 代码。

于 2016-09-11T13:12:50.670 回答