有没有使用Qpromise库限制promise并发的方法?
这个问题有点与如何限制Qpromise并发有关?
但问题是我正试图这样做:
for (var i = 0; i <= 1000; i++) {
return Q.all([ task1(i), task2(i) ]); // <-- limit this to 2 at a time.
}
真正的用例是:
posts.for每个(函数(post){}
但问题是node同时执行所有帖子的所有任务,比如同时向facebook询问500篇帖子的“喜欢次数”。
如何限制Q.all()
一次只能有两篇文章执行任务?或者,还有什么其他可能的解决方案可以应用于此?
注意:大多数任务(如果不是全部)依赖于请求库
下面是我用来限制qpromise的代码。
我只是把它从一个我需要它的项目中删掉了。如果有更多的人感兴趣,我可以把它分成一个模块或别的什么。
几天前我问了一个非常相似的问题: Node.js/Express和并行队列
我找到的解决方案(见我自己的答案)是使用曹兰的异步。它允许您创建“操作队列”,并且可以限制并发运行的数量:请参阅“队列”方法。
在您的例子中,节点的主循环将从Q中提取元素,并在队列中为每个元素创建一个任务。您还可以限制这一点(因此基本上不会在Q之外重新创建队列),例如,仅当执行最后一个元素时,才向队列添加N个新元素(“queue”方法的“empty”回调)。
多亏了Dan,他的回答和他帮助我将它与我的代码集成,可以使用他的要点和这样的片段来完成:
var qlimit = require('../libs/qlimit');
var test = function(id) {
console.log('Running ' + id);
return Q.nfcall(request, 'some dummy url which takes some time to process, for example a php file with sleep(5)').spread(function(response, body) {
console.log('Response ' + id);
return body;
});
}
test = qlimit.limitConcurrency(test, 1);
var data = [0, 1, 2];
data.forEach(function(id) {
console.log('Starting item ' + id);
Q.all([ test(id) ]);
});
通过这种方式,您可以得到如下结果:
这显然是一次一个请求。
我在实现中遗漏的一点是,在启动循环之前,需要使用limitConcurrency重新声明函数,而不是在循环内部。
如何编写限制Qpromise并发的方法? 例如,我有一个方法。 我希望一次生成不超过5个进程,但对调用代码是透明的。 我需要实现的是一个带有签名的函数 我可以这样称呼他 我已经开始编写我的版本,但我想知道是否有人有一个简洁的实现,我可以对照它进行检查。
有没有办法限制节点js中一次执行的并发Qpromise的数量? 我正在构建一个web scraper,它必须请求并解析3000多个页面,并且在没有限制的情况下,我提出的一些请求没有及时响应,因此连接停止,所需的响应(html代码)变得不可用。 为了解决这个问题,我发现限制请求的数量可以解决我的问题。 我曾尝试过以下方法,但均无效: Qpromise中的并发限制-节点 我需要请求一个URL数组,一次
这是港口范围。我不确定这是否重要(我不确定DNAT和SNAT是否使用端口),但范围似乎远高于16K。 还有什么可能限制通过iptables/netfilter转发的并发连接的数量吗?
我正在寻找下面输入和输出XML的XSLT(1.0)代码。 在输出XML中,C6元素下可以有任何子节点。在下面的XML中,我放了CN元素,但它可以是任何名称。 输入XML- 所需的输出XML- 先谢谢你。
我有两个节点js应用程序,一个发送post请求,如下所示: 另一个是试图用表达式和正文解析器来处理它: 问题是在接收端我无法检索我正在寻找的json数据。有人知道我错过了什么吗?
主要内容:1.算法,2.单机限流器,3.分布式限流器,4.接入层限流器1.算法 计数器 漏桶算法 令牌桶算法 滑动窗口算法 1.1 计数器法 实现简单, 就是临界值问题 指在指定的时间里累加访问量,达到阈值后,触发限流策略,在下一周期访问数量清除 使用redis的incr和key过期 问题:在相邻的一个时间段20s内,请求超过100。 这个算法通常用于QPS限流和统计总访问量,对于秒级以上的时间周期来说,会存在一个非常严重的问题,那就是临界问题。 假设1min内服务