Description Details Author(s) Examples
Enables synchronization between R processes using a file lock. Supports both exclusive (writer) and shared (readers) locks.
On UNIX, the implementation relies on the fcntl
system
call. While on Windows, the LockFileEx
/UnlockFileEx
APIs are used.
Package: | flock |
Type: | Package |
Version: | 0.6 |
Date: | 2014-11-24 |
License: | Apache License 2.0 |
Ivan Popivanov
Maintainer: Ivan Popivanov <ivan.popivanov@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | ## Not run:
require(DBI)
require(flock)
require(RSQLite)
require(parallel)
dbpath <- tempfile()
con <- dbConnect(RSQLite::SQLite(), dbname=dbpath)
df <- data.frame(value = 0)
dbWriteTable(con, "test", df)
dbDisconnect(con)
write.one.value <- function(val, lock.name=NULL) {
if(!is.null(lock.name)) {
file.lock = lock(lock.name)
}
# The three lines below are the "critical section"
con <- dbConnect(RSQLite::SQLite(), dbname = dbpath)
dbWriteTable(con, "test", data.frame(value = val), append = TRUE)
dbDisconnect(con)
if(!is.null(lock.name)) {
unlock(file.lock)
}
}
lock.name = tempfile()
# Run the parallel database updates with two cores
mclapply(1:100, write.one.value, mc.cores=2, lock.name=lock.name)
# To see the failing scenario, run (on a multi-core system):
# mclapply(1:100, write.one.value, mc.cores=2)
## End(Not run)
|
Loading required package: DBI
Loading required package: RSQLite
Loading required package: parallel
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
[[4]]
NULL
[[5]]
NULL
[[6]]
NULL
[[7]]
NULL
[[8]]
NULL
[[9]]
NULL
[[10]]
NULL
[[11]]
NULL
[[12]]
NULL
[[13]]
NULL
[[14]]
NULL
[[15]]
NULL
[[16]]
NULL
[[17]]
NULL
[[18]]
NULL
[[19]]
NULL
[[20]]
NULL
[[21]]
NULL
[[22]]
NULL
[[23]]
NULL
[[24]]
NULL
[[25]]
NULL
[[26]]
NULL
[[27]]
NULL
[[28]]
NULL
[[29]]
NULL
[[30]]
NULL
[[31]]
NULL
[[32]]
NULL
[[33]]
NULL
[[34]]
NULL
[[35]]
NULL
[[36]]
NULL
[[37]]
NULL
[[38]]
NULL
[[39]]
NULL
[[40]]
NULL
[[41]]
NULL
[[42]]
NULL
[[43]]
NULL
[[44]]
NULL
[[45]]
NULL
[[46]]
NULL
[[47]]
NULL
[[48]]
NULL
[[49]]
NULL
[[50]]
NULL
[[51]]
NULL
[[52]]
NULL
[[53]]
NULL
[[54]]
NULL
[[55]]
NULL
[[56]]
NULL
[[57]]
NULL
[[58]]
NULL
[[59]]
NULL
[[60]]
NULL
[[61]]
NULL
[[62]]
NULL
[[63]]
NULL
[[64]]
NULL
[[65]]
NULL
[[66]]
NULL
[[67]]
NULL
[[68]]
NULL
[[69]]
NULL
[[70]]
NULL
[[71]]
NULL
[[72]]
NULL
[[73]]
NULL
[[74]]
NULL
[[75]]
NULL
[[76]]
NULL
[[77]]
NULL
[[78]]
NULL
[[79]]
NULL
[[80]]
NULL
[[81]]
NULL
[[82]]
NULL
[[83]]
NULL
[[84]]
NULL
[[85]]
NULL
[[86]]
NULL
[[87]]
NULL
[[88]]
NULL
[[89]]
NULL
[[90]]
NULL
[[91]]
NULL
[[92]]
NULL
[[93]]
NULL
[[94]]
NULL
[[95]]
NULL
[[96]]
NULL
[[97]]
NULL
[[98]]
NULL
[[99]]
NULL
[[100]]
NULL
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.