有没有一种方法可以在R进程之间共享锁(例如锁文件)?

6

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


你期望从实施这个方案中获得什么好处?有多少个进程,文件有多大?这不应该由文件服务器来实现吗? - krlmlr
1
我在同一台服务器上运行15个进程,文件大小高达3 GB。我观察到进程的波浪式等待其文件(浪费CPU),然后是它们全部计算的时间(浪费带宽)。错开负载时间可以更有效地利用CPU和网络。文件服务器尝试同时满足所有请求。 - Michael Kuhn
2个回答

3

虽然我找不到一个 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")

2
你可以使用 file.remove("/tmp/my_simple_lock") 来代替 system("rm -f /tmp/my_simple_lock") - blueblob

1
前面的答案可能不够明确。如果您要访问的文件名为filename,并且您在单个目录中操作...(如果使用不同的目录,则将filename替换为整个路径)
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")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接