R中的信号量(IPC)

Posted

技术标签:

【中文标题】R中的信号量(IPC)【英文标题】:Semaphore (IPC) in R 【发布时间】:2019-11-29 10:14:39 【问题描述】:

有没有办法在 R 中使用信号量(IPC)?我有几个并行运行的 R 脚本,我只希望它们中的某些(较少)进入脚本的关键阶段。在 C 中,这可以通过在进程之间共享的named semaphores 轻松完成,但是如何在 R 中做到这一点?

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

【问题讨论】:

您运行的是什么类型的集群?你用了并行包还是别的什么?他们是否共享内存? @JanvanderLaan 没有集群,只是单独的 R 会话。 【参考方案1】:

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

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

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

【讨论】:

谢谢扬! 1)但是文件锁定不是只有一个进程才能获得锁定吗?我需要更通用的解决方案 - 让最大 k > 0 个进程共享资源......即信号量的作用。 2) *“但我也想知道你是否真的需要这个。”请把这个给我 :-) 这是最简单的方法 :-)

以上是关于R中的信号量(IPC)的主要内容,如果未能解决你的问题,请参考以下文章

使用 posix 未命名信号量的 IPC [关闭]

linux里的ipc是啥意思

并发编程-进程中的锁信号量 事件和队列

进程间通信(IPC)之信号量

进程间通信(IPC)之信号量

进程间通信 (IPC) 方法总结