r - 从 R 中的并行进程写入文件时锁定文件

标签 r parallel-processing file-locking filelock

我用 parSapply()来自 parallel R 中的包。我需要对大量数据进行计算。即使并行执行也需要数小时,所以我决定使用 write.table() 定期将结果从集群写入文件。 ,因为进程在内存不足或其他一些随机原因时会不时崩溃,我想从它停止的地方继续计算。我注意到我得到的一些 csv 文件行只是在中间被剪掉了,可能是因为多个进程同时写入文件。有没有办法在 write.table() 期间锁定文件的时间?执行,所以其他集群无法访问它,或者唯一的出路是从每个集群写入单独的文件,然后合并结果?

最佳答案

现在可以使用 filelock 创建文件锁( GitHub )
为了便于使用 parSapply()你需要编辑你的循环,这样如果文件被锁定,进程不会简单地退出,而是再试一次或 Sys.sleep()在很短的时间内。但是,我不确定这将如何影响您的表现。
相反,我建议您创建可以保存数据的特定于集群的文件,从而无需锁定文件并且不会降低性能。之后,您应该能够编织这些文件并创建最终结果文件。
如果大小是一个问题,那么您可以使用 disk.frame处理大于系统 RAM 的文件。

关于r - 从 R 中的并行进程写入文件时锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20425071/

相关文章:

python - 生成精确召回曲线的置信区间

python - 多个进程之间共享配置变量

c# - 并行框架和避免虚假共享

java - Java 中的 FileLock 在同一进程内或不同进程之间或两者之间跨多个线程是否安全?

.net - 文件被哪个进程锁定?

linux - 在 R 中运行命令后变量意外更改

c - 失败,错误为 : ‘‘operator’ is not a valid installed package

r - 如何将气泡集中在面网格中

bash - 如何在 Bash 中为 GNU Parallel 创建 Stack 或 LIFO

java - 强制 java 释放 Java 中的所有文件锁/句柄