قد تفشل محاولة استخدام اتصالات ODBC متعددة مؤشرات الترابط العاملة المتوازية كما في المثال التالي:
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 مغلقة.
المشكلة هنا أن الاتصالات الخاصة بالعملية، حيث ما لم تشارك العاملين العملية الأصل (كما تم إنشاؤها بواسطة تفرع العاملين متعددة النواة)، لا يمكن مشاركة اتصالات الأصل العمال. لتوزيع الحسابات ODBC على العاملين غير متشعب، تأسيس اتصالات على كل العاملين كجزء من المهمة الموزعة.
على سبيل المثال:
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')})