Почему мои сотрудники 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

Без дополнительной информации о данных, функциях и задачах вам трудно чем-либо помочь.

Другие вопросы по тегам