怎样在Node.js中实现Sleep的功能?
发布于 9 年前 作者 i2Worker 10352 次浏览 最后一次编辑是 8 年前 来自 问答

最近在研究用Node.js做网络爬虫,在爬一个网站的时候,通过测试发现它有一个限制,如果持续爬它超过100个网络链接的时候,它就会限制你访问,过一段时间(5分钟左右)才让你访问。我想实现一个功能,如果访问达到90个链接的时候,程序暂停一会(1分钟左右),然后继续访问,就相当于其他语言中的Sleep功能(不要告诉我用循环,这个方法CPU都被它占用了)。在Node.js这种异步环境下,有没有比较好的方法实现Sleep这样的功能?

6 回复

setTimeout, 可以考虑结合 async.forever 使用

试试 async 的 parallelLimit方法吧,进行的并发数的限制 之前写爬虫的时候也遇到过这样的问题,后来采用的是修改了爬虫的策略解决问题的,没有采用你上述的sleep方法 node是单线程的,sleep原理上是将线程挂起,如果你不使用cluster或者是child process,主线程被挂起,爬虫也就不会继续执行了。。。 建议你修改下爬虫的策略

使用later这样的定时任务

@jysperm 谢谢,我目前采用的就是这个方法,通过setTimeout暂停一段时间后再调用一下自己,效果还可以,就是要得到执行后的结果感觉必须别扭,我把代码整理一下,到时候发出来大家看看。

@CocaCola183 我现在就是用的async中的mapLimit,并发数已经被我调到只有3了,我发现它好像是计总数的,不能持续访问超过100个链接,所以要暂停了。 另外,我这个程序是命令行模式的,不是web模式的,暂停一下没有关系的,如果是Web模式的话,估计真的只能像你所说的那样调整爬虫策略了。

sudo npm install node-schedule

自己一直在用的

回到顶部