ODBC bağlantıları paralel kod içinde kullanma

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')})


Daha fazla yardıma mı ihtiyacınız var?

Yeteneklerinizi geliştirin
Eğitimleri keşfedin
Yeni özellikleri ilk olarak siz edinin
Microsoft Insider 'a katılın

Bu bilgi yardımcı oldu mu?

Geri bildiriminiz için teşekkür ederiz!

Geri bildiriminiz için teşekkürler! Office destek temsilcilerimizden biriyle görüşmeniz yararlı olabilir.

×