【问题标题】:Urllib and concurrency - PythonUrllib 和并发 - Python
【发布时间】:2011-02-11 10:41:28
【问题描述】:

我正在通过 WSGI 提供一个 python 脚本。该脚本通过 urllib 访问网络资源,计算资源,然后返回一个值。

问题是 urllib 似乎无法处理对精确 URL 的许多并发请求

一旦请求达到 30 个并发请求,请求就会变得缓慢! :(


我们将不胜感激! :D

【问题讨论】:

  • 您确定 urllib 是瓶颈,而不是一些环境限制,例如通过代理发送请求?

标签: python http concurrency wsgi urllib


【解决方案1】:

是的,urllib 不做太多并发。每次urlopen 时,它都必须建立连接、发送 HTTP 请求并从响应中获取状态码和标头(并可能从那里处理重定向)。因此,尽管您可以按照自己的节奏阅读响应正文,但请求的大部分等待时间已经发生。

如果你需要更多的并发性,你可能不得不选择某种异步网络 IO 工具(例如,Eventlet 似乎在其首页上有一个合适的示例),或者只是在其中启动每个 urlopen自己的线程。

【讨论】:

  • 即使在使用单独的线程时,GIL 也会阻止真正的并发(尽管它看起来像并发)。需要单独的进程才能实现真正的并发(这就是 eventlet 所做的)。
猜你喜欢
  • 1970-01-01
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多