Я пытаюсь настроить параллельную задачу, где каждому работнику нужно будет делать запросы к базе данных. Я пытаюсь настроить каждого работника с помощью соединения, как показано в this question, но каждый раз, когда я пытаюсь, он возвращает <Expired PostgreSQLConnection:(2781,0)>
для многих рабочих, которых я зарегистрировал.Соединения RPostgreSQL истек, как только они начинаются с doParallel clusterEvalQ
Вот мой код:
cl <- makeCluster(detectCores())
registerDoParallel(cl)
clusterEvalQ(cl, {
library(RPostgreSQL)
drv<-dbDriver("PostgreSQL")
con<-dbConnect(drv, user="user", password="password", dbname="ISO",host="localhost")
})
Если я пытаюсь запустить мой foreach
несмотря на ошибку, он терпит неудачу с task 1 failed - "expired PostgreSQLConnection"
Когда я вхожу в состояние Postgres сервера он показывает все активные сеансы, которые были создано.
У меня нет никаких проблем с взаимодействием с postgres из моего основного экземпляра R.
Если я бегу
clusterEvalQ(cl, {
library(RPostgreSQL)
drv<-dbDriver("PostgreSQL")
con<-dbConnect(drv, user="user", password="password", dbname="ISO",host="localhost")
dbGetQuery(con, "select inet_client_port()")
})
, то он будет возвращать все клиентские порты. Это не дает мне сообщение об истекшем времени, но если я попытаюсь запустить команду foreach, он сбой будет с той же ошибкой.
Edit:
Я пробовал это на Ubuntu и 2 окна компьютеров, все они дают ту же ошибку.
Другой Edit:
Сейчас 3 окна компьютеры
Можете ли вы также добавить свой код foreach в сообщение? –
@JellenVermeir не работает ни в какой команде 'dbGetQuery', независимо от того, что еще находится в' foreach'. Например: 'foreach (i = 1: 4)% dopar% dbGetQuery (con," select * from sometable limit 1 ")' будет терпеть неудачу, но 'foreach (i = 1: 4)% do% dbGetQuery (con," select * from sometable limit 1 ")' не прерывается. Когда я говорю, что это терпит неудачу, я имею в виду, что я получаю сообщение об ошибке «expired PostgreSQLConnection» –