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 会话的开销通常很小(几秒钟)。您可以使用诸如make
或snakemake
之类的工具来进行协调。
【讨论】:
谢谢扬! 1)但是文件锁定不是只有一个进程才能获得锁定吗?我需要更通用的解决方案 - 让最大k
> 0 个进程共享资源......即信号量的作用。 2) *“但我也想知道你是否真的需要这个。”请把这个给我 :-) 这是最简单的方法 :-)以上是关于R中的信号量(IPC)的主要内容,如果未能解决你的问题,请参考以下文章