【问题标题】:Is there a way to share a lock (e.g. a lock file) between R processes?有没有办法在 R 进程之间共享锁(例如锁文件)?
【发布时间】:2013-03-12 02:02:21
【问题描述】:

我有一堆不同的 R 进程(从命令行独立启动),它们都需要加载不同的大文件。为了避免阻塞网络,我想添加一个锁/信号量,例如通过锁定文件,以便他们一个接一个地获取文件。在标准 Linux 系统上,应该只有一个进程能够获得锁。

【问题讨论】:

  • 您期望从实施此功能中获得什么好处?有多少进程,文件有多大?这不应该由文件服务器来实现吗?
  • 我在同一台服务器上运行 15 个进程,文件大小最大为 3 GB。我观察到等待文件的进程波(浪费了 CPU),然后是所有进程都在计算的时间(浪费了带宽)。错开加载时间可以提高 CPU 和网络的使用效率。文件服务器尝试一次满足所有请求。

标签: r locking semaphore


【解决方案1】:

虽然我找不到 R 包,但可以使用 Linux 命令lockfile

write("Attempting to get lock", stderr())
system("lockfile /tmp/my_simple_lock")

# Do stuff

write("Releasing lock", stderr())
system("rm -f /tmp/my_simple_lock")

【讨论】:

  • 你也可以使用system("rm -f /tmp/my_simple_lock")代替file.remove("/tmp/my_simple_lock")
【解决方案2】:

上一个答案的可能更明确的版本。如果您正在访问的文件称为文件名,并且您在单个目录中操作...(如果您使用不同的目录,那么显然将文件名替换为整个路径)

write("Attempting to get lock", stderr())
system("lockfile filename.lock")
\# do whatever you want to the file
write("Releasing lock", stderr())
remove.file("filename.lock")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-22
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多