我在 R 中使用parSapply()
from parallel
package。我需要对大量数据执行计算。即使并行执行也需要数小时,因此我决定使用 定期将结果从集群写入文件write.table()
,因为进程在内存不足或其他随机原因时不时崩溃,我想继续从把它停下来。我注意到我得到的一些 csv 文件行只是在中间被剪切,可能是由于多个进程同时写入文件的结果。有没有办法在执行时对文件进行锁定write.table()
,以便其他集群无法访问它,或者唯一的出路是从每个集群中写入单独的文件,然后合并结果?
问问题
1520 次
1 回答
0
现在可以使用filelock
( GitHub )创建文件锁
为了促进这一点,parSapply()
您需要编辑循环,以便如果文件被锁定,进程不会简单地退出,而是重试或Sys.sleep()
短时间尝试。但是,我不确定这将如何影响您的表现。
相反,我建议您创建可以保存数据的特定于集群的文件,从而无需锁定文件并且不会降低性能。之后,您应该能够编织这些文件并创建最终结果文件。如果大小是一个问题,那么您可以disk.frame
用来处理大于系统 RAM 的文件。
于 2020-12-03T10:39:19.803 回答