自从我最后一次看上去已经有一段时间了(例如过时的nws package),所以我想知道在此期间是否有任何“发生”。
有没有办法在并行进程之间共享内存?
我希望每个进程都能访问扮演元对象角色的environment
对象。
答案 0 :(得分:2)
rredis package提供与nws
类似的功能。您可以将rredis
与foreach
和doRedis
包一起使用,也可以与任何其他并行编程包一起使用,例如parallel
。
答案 1 :(得分:1)
通过bigmemory
包的共享矩阵可以非常有效地工作。您可以将每个R对象序列化/反序列化为此类矩阵。
不幸的是,你可以在进程之间共享矩阵的唯一方法是通过它们的描述符,这些描述符不是确定性的(即除非你与其他进程通信,否则你无法获得描述符)。要解决这个鸡蛋问题,您可以将描述符保存在文件系统上的选定位置。 (描述符非常小,它包含的唯一非常重要的东西是实际bigmatrx的内存地址)。
如果您仍然感兴趣,我可以发布R代码。
答案 2 :(得分: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进程之间复制大对象时,不会产生不必要的副本:只有一个序列化和一个反序列化。
没有使用网络套接字。