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)
うまくいきません。(少なくとも) 環境の定義が間違っていると思います...
どんな助けでも大歓迎です!