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