Python多线程与Urllib2问题

3 投票
2 回答
937 浏览
提问于 2025-04-15 15:33

我可以用很多线程同时快速下载多个文件,但问题是过了几分钟后,它的速度会逐渐变慢,最后几乎停下来。我不知道为什么。我的代码看起来没有问题,内存和CPU也正常。唯一能想到的就是urllib2可能没有正确处理这么多的连接。如果有帮助的话,我在使用代理,但即使不使用代理也会出现这个问题。有没有人对此有什么建议或见解?谢谢!

2 个回答

1

就像其他回答提到的,问题可能出在你的网络连接或者提供文件的网站上。如果你能在本地用一个测试服务器运行你的代码,那就可以排除这个问题。

如果在使用测试服务器时问题消失了,那就说明问题出在你的网络连接或者远程服务器上。

如果在使用测试服务器时问题依然存在,那很可能是你的代码里有问题,不过这时候你至少可以查看服务器的日志,了解发生了什么。

另外,你可以尝试一下 这个讨论串,里面建议使用 httplib2 来替代 urllib2。

3

你能确认一下,如果不使用Python,进行同样数量的同时下载,下载速度是否依然很快吗?也许问题不在你的代码上,而是你的网络连接被限制了,或者是提供文件的网站出现了问题。

如果不是这个问题,你可以试试pyprocessing这个库,来实现一个多进程的版本,而不是多线程的版本。如果你使用的是Python 2.6,pyprocessing已经包含在里面,叫做multiprocessing。把线程代码转换成多进程代码其实很简单,所以值得一试,这样可以确认问题是不是出在线程上。

撰写回答