我已经看到很多关于写入文件的问题,但我想知道打开文本文件、附加一些数据然后在要从多个连接写入时再次关闭它的最可靠方法是什么(即并行计算情况),并且不能保证每个连接何时要写入文件。
例如,在下面的玩具示例中,它仅使用我桌面上的内核,它似乎工作正常,但我想知道如果写入时间变长并且写入文件的进程数增加,这种方法是否容易失败(尤其是在可能存在一些延迟的网络共享上)。
当可能有其他从属进程想要同时写入文件时,任何人都可以提出一种可靠、明确的方式来打开、写入然后关闭连接吗?
require(doParallel)
require(doRNG)
ncores <- 7
cl <- makeCluster( ncores , outfile = "" )
registerDoParallel( cl )
res <- foreach( j = 1:100 , .verbose = TRUE , .inorder= FALSE ) %dorng%{
d <- matrix( rnorm( 1e3 , j ) , nrow = 1 )
conn <- file( "~/output.txt" , open = "a" )
write.table( d , conn , append = TRUE , col.names = FALSE )
close( conn )
}
我正在寻找最好的方法来做到这一点,或者是否有最好的方法。也许 R 并foreach
自动处理我称之为 writelock 的问题?
谢谢。