【问题标题】:Execute many process concurently nodejs节点js并发执行一个进程
【发布时间】:2015-02-05 08:02:36
【问题描述】:

我在 Nodejs 中并发执行查询时遇到问题。 首先我从mysql读取所有数据,大约有5000条记录。然后在 Mongo 中检查所有这些记录,然后更新回 mysql。 什么方法最好?我正在考虑使用异步模块先执行记录限制,然后继续。可以吗? 类似的东西:

async.whilst(
    function() {return ..;},
    function(callbackOut) {
       record1,record2,record3
       async.parallel([
          function(record1),function(record2),function(record3) 
       ]),
       function() {
           callbackOut();
       } ..
  }

编辑:我刚刚检查了 async.eachLimit(根据 freele 的建议),它比结合 while 和 parallel 更好。但这是另一种更好的方式吗?比如 fork new childprocess 或 ..?

【问题讨论】:

  • 如果您使用回调,则可以使用 async,如果您更喜欢 Promise,则可以使用 Q。我认为您不需要whilst,因为我认为您应该使用each(或者如果您需要限制,则使用eachLimit)。或者async.parallel([ function(){ ... }, function(){ ... } ], callback); 就足够了。你打算在你的第一个函数中返回什么?
  • 我将返回 mongo 中每条记录的 id。当并行功能完成时,我会将它推入一个数组,这不是问题。我只是不知道“[function(){ ... }, function(){ ... } ]”要填什么,因为它只是一个有很多价值的函数。
  • 每个函数都是一种 function(object, done){..} 的函数,其中 done() 在完成与对象的异步内容后调用。
  • 年,我认为 eachLimit 适合我的情况,而不是平行的。谢谢。

标签: node.js


【解决方案1】:

使用parallelLimit 将并发操作数限制为小于 5000,然后查看您的问题是否仍然存在

【讨论】:

  • 我有一个 5000 值的任务要执行。如果我只使用 parallelLimit ,我必须在里面创建一个 5000 函数的“任务”。如果我将while和parallel结合起来就可以了。我只是想知道,这是好方法吗?或者可以做其他方式,比如分叉进程或其他方式..
猜你喜欢
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多