Почему мои сотрудники doRedis не начинают обработку, пока все задания не находятся на сервере redis
При использовании foreach и doRedis работники doRedis ждут, пока все задания не достигнут сервера redis, прежде чем начинать обработку. Возможно ли, чтобы они начались до того, как закончится вся предварительная обработка?
Я использую итератор, который отлично работает - предварительная обработка происходит "вовремя", и данные задания начинают попадать на сервер при запуске итератора. Однако я не могу воспользоваться этим поведением, потому что рабочие просто ждут загрузки всех рабочих мест.
Пример кода:
library(foreach)
library(doRedis)
registerDoRedis("worklist", "0.0.0.0")
foreach (var = complex.iter(1:1E6)) %dopar% {
process.function(var)
}
В этом примере complex.iter
занимает много времени, и есть много элементов для перебора. Таким образом, было бы здорово, если бы работники начали работать process.function()
до того, как вся предварительная обработка закончена. К сожалению, они, кажется, ждут, пока complex.iter
работает на всех элементах.
Я поставил .inorder=F
,
Любые предложения о том, как добиться этого желаемого поведения? Благодарю.
2 ответа
В случае, если у других есть тот же вопрос:
Ответ на данный момент - нет, итератор завершает агрегацию всех данных задачи перед загрузкой и распределением рабочих мест среди работников. Соответствующее обсуждение здесь: https://github.com/bwlewis/doRedis/issues/39
Я также ошибался в своем вопросе, поскольку итератор завершал работу перед загрузкой данных. Тем не менее, блокировка загрузки заставляет работников ждать не только до завершения итератора, но и до завершения загрузки.
Я обновлю ответ, если мы внесем какие-либо изменения.
Вы можете попробовать несколько вещей, чтобы заставить его работать душно. Один из них - установка размера чанка, а второй - запуск местных работников для выполнения задач в фоновом режиме.
[Вот ссылка на PDF, объясняющая, как эти две функции используются правильно]
startLocalWorkers
& setChunkSize
Без дополнительной информации о данных, функциях и задачах вам трудно чем-либо помочь.