Aşağıdaki örnekte olduğu gibi birden fazla ODBC bağlantıları parallelized çalışan iş parçacıkları arasında kullanılmaya çalışılıyor başarısız olabilir:
loaddata <- function(cn){
result <- sqlQuery(cn,'select * from boston')
return(head(result))
}
library(RODBC)
cn1 <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester')
cn2 <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester')
cn3 <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester')
cn4 <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester')
rxSetComputeContext('localpar')
system.time ({
z <- rxExec(loaddata, rxElemArg(list(cn1,cn2,cn3,cn4)),
packagesToLoad='RODBC')
})
Error in do.call(.rxDoParFUN, as.list(args)) :
task 1 failed - "first argument is not an open RODBC channel"
ODBC bağlantıları kapalı olarak işçi almak sorun değildir.
Sorun burada çalışanları (bildiriliyor çalışanları forking yoluyla oluşturulan) olduğu gibi üst işlemin paylaştığı sürece, üst maddenin bağlantıları çalışanları tarafından paylaşılamayan şekilde bağlantılarını işleme özgü değildir. ODBC hesaplamaları çatallanmış çalışanlar üzerinde dağıtmak için Dağıtılmış görev bir parçası olarak her alt bağlantıları kurmak.
Örnek:
loaddata <- function(){library(RODBC)
cn <- odbcConnect("RevoTestDB", uid='RevoTester', pwd='RevoTester')
result <- sqlQuery(cn,'select * from boston')
return(head(result))
}
z <- system.time({z <- rxExec(loaddata,
packagesToLoad='RODBC')})