Urllib和并发 - Python

4
我正在通过WSGI提供Python脚本服务。该脚本通过urllib访问Web资源,计算资源并返回值。

问题在于,urllib似乎无法处理对特定URL的多个并发请求

一旦请求数量增加到30个并发请求,请求速度就会变得非常慢! :(


非常感谢您的帮助! :D


你确定urllib是瓶颈而不是一些环境限制,比如通过代理发送请求吗? - mhawke
1个回答

3

是的,urllib 不支持并发。每次使用 urlopen,都需要建立连接、发送 HTTP 请求,并从响应中获取状态码和头部信息(可能还要处理重定向)。因此,尽管您可以按自己的节奏读取响应正文,但请求的大部分等待时间已经过去了。

如果您需要更高的并发性,可能需要选择一些异步网络 IO 工具(例如:Eventlet 在其首页上有一个合适的示例),或者启动每个 urlopen 在自己的线程中运行。


GIL即全局解释锁,即使使用单独的线程也会阻止真正的并发性(尽管看起来像并发)。为了实现真正的并发性,需要使用单独的进程(这就是eventlet所做的)。 - cerberos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接