【发布时间】:2013-10-25 20:30:16
【问题描述】:
我正在使用 Python 来访问有时需要很长时间才能运行(超过 5 分钟)的 REST API。我正在使用 pyelasticsearch 发出请求,并尝试将超时设置为 10 分钟,如下所示:
es = ElasticSearch(config["es_server_url"], timeout=600)
results = es.send_request("POST",
[config["es_index"], "_search_with_clusters" ],
cluster_query)
但它在 5 分钟后(不是 10 分钟)超时,requests.exceptions.ConnectionError (Caused by <class 'socket.error'>: [Errno 104] Connection reset by peer)
我尝试设置套接字超时并像这样直接使用请求:
socket.setdefaulttimeout(600)
try:
r = requests.post(url, data=post, timeout=600)
except:
print "timed out"
每次大约 5 分钟后超时。
如何让我的脚本在请求返回之前等待更长的时间?
【问题讨论】:
-
该错误意味着服务器关闭了您的套接字,因此您指定更长的超时时间并没有帮助。 (这也可能意味着您真正与之交谈的公司 Web 代理有超时,或者中间的某个路由器决定切断您的连接。但它不可能是您的代码超时。)服务你的代码,还是其他人的?
-
是的,这是我的服务器。谢谢你的提示。我尝试直接向实际服务器名称:端口发出请求,并在 8.5 分钟后成功。是 BigIP 在 5 分钟后关闭连接。
标签: python http socket-timeout-exception pyelasticsearch