Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的信号量(IPC)_R_Ipc_Semaphore - Fatal编程技术网

R中的信号量(IPC)

R中的信号量(IPC),r,ipc,semaphore,R,Ipc,Semaphore,有没有办法在R中使用信号量(IPC)?我有几个并行运行的R脚本,我只希望它们中的某些(较小)数量进入脚本的关键阶段。在C中,这可以通过在进程之间共享来轻松实现,但在R中如何实现呢 请注意,我的计算是在Linux上运行的,因此Linux特定的解决方案是可能的。您可以查看lockfile包。此软件包使用操作系统例程安全地创建锁文件。这可能是最简单的解决方案 查看链接到的C例程的文档。将它们封装到从R调用的一些C/C++函数中并不太困难。使用Rcpp和/或inline包可能只有几行代码 但我也想知道你

有没有办法在R中使用信号量(IPC)?我有几个并行运行的R脚本,我只希望它们中的某些(较小)数量进入脚本的关键阶段。在C中,这可以通过在进程之间共享来轻松实现,但在R中如何实现呢


请注意,我的计算是在Linux上运行的,因此Linux特定的解决方案是可能的。

您可以查看
lockfile
包。此软件包使用操作系统例程安全地创建锁文件。这可能是最简单的解决方案

查看链接到的C例程的文档。将它们封装到从R调用的一些C/C++函数中并不太困难。使用
Rcpp
和/或
inline
包可能只有几行代码


但我也想知道你是否真的需要这个。如果您有一些代码并行地进行一些计算,然后进行一些计算,如果这些计算已经完成,那么还有其他解决方案。一种是使用
parallel
包从R开始进程。您可以使用该软件包的功能控制主R进程的同步。另一个解决方案是首先运行第一次计算,然后在这些计算完成后,为第二部分启动新的R会话。启动R会话的开销通常很小(几秒钟)。您可以使用
make
snakemake
等工具来协调此操作

您正在运行什么类型的群集?你用的是并行软件包还是别的什么?他们是否共享内存?@JanvanderLaan没有集群,只是单独的R会话。谢谢Jan!1) 但文件锁定不是只有一个进程才有锁吗?我需要更通用的解决方案-让max
k
>0个进程共享资源。。。i、 e.信号量的作用。2) *“但我也想知道你是否真的需要这个。”请把这个给我:-)这是最简单的出路:-)