Bjö*_*ist 20 python parallel-processing http download feed
我正在寻找一个python库或命令行工具,用于并行下载多个文件.我目前的解决方案是按顺序下载文件,这很慢.我知道你可以很容易地在python中编写一个半成熟的线程解决方案,但是在使用线程时我总是遇到烦人的问题.它用于从网站轮询大量xml提要.
我对解决方案的要求是:
请不要建议我如何实施上述要求.我正在寻找一个现成的,经过实战考验的解决方案.
我想我应该描述我想要的东西......我有大约300种不同的数据源,因为xml格式的文件来自50个数据提供者.每个文件的大小在100kb到5mb之间.我需要经常轮询它们(如每隔几分钟一次)以确定它们是否有我需要处理的新数据.因此,下载程序使用http缓存来最小化要获取的数据量非常重要.它显然也使用gzip压缩.
那么最大的问题是如何在不超越任何边界的情况下以尽可能高效的方式使用带宽.例如,如果您打开20个同时连接到其数据源的连接,则一个数据提供商可能会认为它被滥用.相反,最好使用一个或两个重用于多个文件的连接.或者您自己的连接可能会以奇怪的方式受到限制.我的isp限制了您可以执行的dns查找次数,因此某种dns缓存会很好.
Pan*_*aj 8
你可以尝试pycurl,虽然界面起初并不容易,但是一旦看了例子,就不难理解了.我用它在微薄的linux盒子上并行获取1000个网页.
唯一的问题是它提供了一个基本的基础设施(基本上只是一个优秀的curl库上面的python层).您将不得不写几行来实现您想要的功能.
有很多选择,但很难找到适合您所有需求的选项.
在您的情况下,尝试这种方法:
使用另一个线程来收集结果(即另一个队列).当结果对象的数量= =第一个队列中的放置数量时,您就完成了.
确保所有通信都通过队列或"配置对象"进行.避免访问线程之间共享的数据结构.这可以为您节省99%的问题.
归档时间: |
|
查看次数: |
6125 次 |
最近记录: |