一次/并行检索多个URL

时间:2010-08-20 12:50:48

标签: python parallel-processing screen-scraping

  

可能重复:
  How can I speed up fetching pages with urllib2 in python?

我有一个下载网页的python脚本,解析它并从页面返回一些值。我需要抓一些这样的页面来获得最终结果。每个页面检索需要很长时间(5-10秒),我宁愿并行提出请求以减少等待时间 问题是 - 哪种机制可以快速,正确地执行,并且CPU /内存浪费最少?扭曲,异步,线程,其他什么?你能提供一些与例子有关的链接吗? 感谢

UPD:这个问题有一些解决方案,我正在寻找速度和资源之间的妥协。如果你能告诉一些经验细节 - 从你的观点来看它是如何快速负载的 - 那将是非常有帮助的。

3 个答案:

答案 0 :(得分:14)

multiprocessing.Pool可能很划算,有some useful examples。 例如,如果您有一个网址列表,则可以以并发方式映射内容检索:

def process_url(url):
    # Do what you want
    return what_you_want

pool = multiprocessing.Pool(processes=4) # how much parallelism?
pool.map(process_url, list_of_urls)

答案 1 :(得分:3)

multiprocessing

生成一堆进程,每个进程对应您要下载的每个URL。使用Queue来保存URL列表,并使每个进程读取队列中的URL,处理它并返回值。

答案 2 :(得分:1)

为此使用异步(即事件驱动而非阻塞)网络框架。一个选项是use twisted。最近可用的另一种选择是使用单片眼镜。这个迷你框架隐藏了非阻塞操作的复杂性。见this example。它可以在幕后使用扭曲或龙卷风,但你并没有真正注意到它。