พยายามที่จะใช้การเชื่อมต่อ ODBC หลายข้ามเธรดตัวทำงาน parallelized อาจล้มเหลวดังตัวอย่างต่อไปนี้:
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 เป็นปิดแล้ว
ปัญหานี้คือการเชื่อมต่อกระบวนการเฉพาะ ดังนั้นเว้นแต่ว่าผู้ปฏิบัติงานที่ใช้ร่วมกันของกระบวนการหลัก (เช่นในการปฏิบัติงานที่สร้างขึ้นผ่านทาง forking ลง), เชื่อมต่อจากแม่ไม่สามารถใช้ร่วมกัน โดยผู้ปฏิบัติงานที่ เมื่อต้องการกระจายการประมวลผล ODBC เกี่ยวกับผู้ปฏิบัติงานที่ไม่ใช่ forked สร้างผู้ปฏิบัติงานแต่ละการเชื่อมต่อเป็นส่วนหนึ่งของงานแบบกระจาย ตัวอย่าง: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')})