我正在尝试编写一个网络爬虫的东西,并希望尽快发出HTTP请求。tornado's AsyncHttpClient似乎是一个不错的选择,但是我看到的所有示例代码(例如https://stackoverflow.com/a/25549675/1650177)基本上都是在一个巨大的URL列表上调用AsyncHttpClient.fetch
,让tornado对它们进行排队并最终发出请求。在
但是如果我想处理一个无限长(或非常大的)来自文件或网络的url列表呢?我不想把所有的网址都载入内存。在
google了一下,但似乎找不到从迭代器AsyncHttpClient.fetch
的方法。不过,我确实找到了一种使用gevent:http://gevent.org/gevent.threadpool.html#gevent.threadpool.ThreadPool.imap来做我想做的事情的方法。在龙卷风中有没有类似的方法?在
我想到的一个解决方案是,在一个fetch
操作完成后,只对这么多的url进行排队,然后添加逻辑来排队,但我希望有一个更干净的解决方案。在
任何帮助或建议将不胜感激!在
我会用一个队列和多个worker来完成这个任务,在https://github.com/tornadoweb/tornado/blob/master/demos/webspider/webspider.py上进行
相关问题 更多 >
编程相关推荐