【发布时间】:2018-11-10 22:14:22
【问题描述】:
我正在使用 requests 库来获取一个简单的 URL(我在这里放了一个虚拟 URL,代码中使用的是普通 URL):
import requests
response = requests.get("http://example.com/foo/bar/", headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36"})
在本地它工作正常,但是当我将相同的代码放在我的服务器上时,这个请求需要很长时间才能完成。我已经为所有这些记录器启用了日志输出:
urllib3.util.retry
urllib3.util
urllib3
urllib3.connection
urllib3.response
urllib3.connectionpool
urllib3.poolmanager
requests
这是他们产生的唯一输出:
2018-05-31 19:55:56,894 - urllib3.connectionpool - DEBUG - Starting new HTTP connection (1): example.com
2018-05-31 19:58:06,676 - urllib3.connectionpool - DEBUG - http://example.com:80 "GET /foo/bar/ HTTP/1.1" 200 None
有趣的是,完成请求总是需要 2 分 10 秒(如果您忽略毫秒)。在本地是即时的。
我接下来应该去哪里寻找线索?
【问题讨论】:
-
被拉取的文件有多大?你的服务器保证什么样的下行带宽,有多少已经用于服务现有连接?服务器在下游带宽上经常配置不足,尤其是面向主要提供静态内容的人销售的服务器。如果你从服务器运行一个普通的
wget,它是否同样慢? -
好主意!是的,wget 同样慢,很奇怪。它是一个 Linode 服务器,完全为空且未使用(操作系统本身除外)。该网站是一个相当普通的老式网站。下载了 40KB。
-
鉴于
wget有同样的问题,可以肯定这与 Python(或根本编程)无关,而与服务器的网络设置/配置有关。也许在 Server Fault 处询问? -
是的,我想我会这样做的。谢谢!
标签: python python-3.x python-requests urllib3