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.* 方法来满足您的需要。
我正在服务器应用程序中分叉一个子进程,该应用程序执行一些重复性 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.* 方法来满足您的需要。