Как вручную добавить задачу в очередь redis для redisWorker?

Можно ли вручную добавить задачу в очередь redis, чтобы ее мог выполнить работник redis?

В качестве простого примера я запускаю работника, используя:

require('doRedis')
redisWorker('jobs')

В другом сеансе R я создаю очередь и хотел бы отправить простое выражение (например: print("hello world")) в очередь, чтобы он выполнялся рабочим.

Я знаю как это сделать используя foreach:

require('doRedis')
registerDoRedis('jobs')
foreach(j=1,.combine=sum,.multicombine=TRUE) %dopar% {
  print("hello world")
  1
}    

Я хотел бы иметь возможность добавить задачу в очередь без использования foreach. Причина в том, что я не хочу, чтобы моя R-сессия ожидала вывода (скрипт записывает свои результаты на диск).

Вот что я пробовал до сих пор, основываясь на коде в .doRedis() функция:

data <- list(queue = "jobs")
queue <- data$queue
queueCounter <- sprintf("%s:counter", queue)   # job task ID counter
ID <- redisIncr(queueCounter)
queueEnv <- sprintf("%s:%.0f.env",queue,ID) # R job environment
queueTasks <- sprintf("%s:%.0f",queue,ID) # Job tasks hash
queueResults <- sprintf("%s:%.0f.results",queue,ID) # Output values
queueStart <- sprintf("%s:%.0f.start*",queue,ID)
queueAlive <- sprintf("%s:%.0f.alive*",queue,ID)

# add the environment to the queue
redisSet(key = queueEnv,
         value = list(expr=expression(), 
                      exportenv=baseenv(), 
                      packages=NULL)

# put tasks in queue
taskblock <- list(ex1 <- expression('print("hello world")'))
j <- 1
taskLabel <- I
task_id = as.character(taskLabel(j))
task <- list(task_id=task_id, args=taskblock)
redisHSet(key = queueTasks, 
          field = task_id, 
          value = task)
redisRPush(key = queue, value = ID)

Это не работает, и я думаю (по крайней мере) определение среды неверно...

Любая помощь очень приветствуется!

0 ответов

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