使用 dopar 时数据库连接间歇性失败

database connection intermittently fails when using dopar

我正在尝试从 R 访问 SQL 服务器数据库,并且需要使用 doSNOW 并行化该过程以获得更高的吞吐量。在搭建集群的时候,我先初始化了连接,但是对于集群中的一些核心,数据库连接失败,原因不明。

cl <- makeCluster(10)
registerDoSNOW(cl)
clusterEvalQ(cl, {
  library(RODBC)
  dbhandle <- odbcDriverConnect(%connectionstring%)
})

此代码打印连接列表,其中一些已成功初始化,其他则失败(返回 -1)。这种情况是随机发生的,每次代码为 运行 时,不同的连接都会失败。

[[1]]
[1] -1

[[2]]
RODBC Connection 1
Details:
  case=nochange
  DRIVER=SQL Server
  SERVER=redacted
  UID=
  Trusted_Connection=Yes
  WSID=redacted
  DATABASE=redacted

[[3]]
[1] -1

[[4]]
RODBC Connection 1
Details:
  case=nochange
  DRIVER=SQL Server
  SERVER=redacted
  UID=
  Trusted_Connection=Yes
  WSID=redacted
  DATABASE=redacted

根据评论,添加 sleep(Sys.getpid()/1000) 解决了问题

clusterEvalQ(cl, {
  sleep(Sys.getpid()/1000)
  library(RODBC)
  dbhandle <- odbcDriverConnect(%connectionstring%)
})