我正在Ubuntu 18.04.2 LTS下运行R 3.5.3,并在AWS上使用ext4文件系统。
我似乎无法使文件锁定起作用,因为在我看来它应该起作用。这是一个代表:
library(flock)
l1 <- lock("temp.txt", exclusive = TRUE)
# I expect this to fail but it doesn't
l2 <- lock("temp.txt", exclusive = TRUE)
# expect TRUE. Ok!
is.locked(l1)
# expect FALSE, but is TRUE
is.locked(l2)
unlock(l1)
# expect FALSE but is TRUE
is.locked(l1)
unlock(l2)
# expect FALSE but is TRUE
is.locked(l2)
那么这个文件系统上的群是否损坏,不受支持,或者我做错了吗?
谢谢
答案 0 :(得分:1)
它用于使用df_new=(df1.combine_first(df1.merge(df2.rename(columns={'Tix':'Ticker'})
,on=['Ticker','ID'])))
print(df_new)
ID NormDist Ticker
0 1.0 0.4 XX
1 NaN 0.6 AA
2 2.0 0.9 NaN
3 NaN NaN BB
软件包将进程锁定在“集群”中。例如:
parallel
将需要大约10秒钟的时间运行,因为每次迭代都必须等待,直到它可以获取文件锁定为止,并且在1秒钟的睡眠期间被锁定,而其他进程正在等待。相反,如果我这样做:
mclapply(1:10,
function(v){
l1 = lock("lock.txt")
v*2
Sys.sleep(1)
unlock(l1)
return(v*2)},
mc.cores=8)
其中的锁是在 睡眠之前,然后它会在大约1秒钟内运行,因为大多数情况下进程可以自由进行。
因此,请在mclapply(1:10,
function(v){
l1 = lock("lock.txt")
v*2
unlock(l1)
Sys.sleep(1)
return(v*2)},
mc.cores=8)
执行部分中使用lock
以启用对共享资源的独占访问。我不确定在R代码的单个线程中是否有意义。单线程将始终能够锁定文件。语义是“ is.lock.by.this.process”,这就是第二次获得TRUE的原因。虽然不能确定parallel
的行为,但是我不确定测试是否已锁定某个东西是否是好习惯-无论是获取锁定然后继续,还是解锁持有的锁定...