Redis 数据直到 Node.js child_process.fork() 完成才显示

Redis data not showing up until Node.js child_process.fork() completes

我正在服务器应用程序中分叉一个子进程,该应用程序执行一些重复性 CPU 绑定工作,每次迭代都会将状态值推送到 Redis。

问题是在子进程完成之前状态值不会显示在 Redis 上,所以我只能获取最后一个状态值。

我正在客户端应用程序中轮询状态值。

我正在使用 node_redis 作为 Redis 客户端。

我也从 redis-cli 验证了子进程完成之前不存在状态值。

父级(服务器应用程序):

child_process.fork('child.js')

子(服务器应用程序):

for (...) {
    //CPU-bound work
    redisClient.hset(key, field, value)
}

客户端应用程序:

(function poll () {
    //wait
    redisClient.hget(key, field)
    poll()
})()

尝试将您的 child 代码更改为

async.eachSeries(data, function(element, next) {
   //do cpu bound work on element
   redisClient.hset(key, field, value, next); // wait for callback before starting next work
}, function(err) {
   console.log('done');
});

如果您不等待 hset 命令回调,for 循环将继续运行,不会有机会更新状态。您可能需要使用更好的 async.* 方法来满足您的需要。