为什么对 localhost 的 python 请求很慢?

Jes*_*dge 3 python python-requests

我有一个简单的烧瓶服务器,定义如下:

import sys

import flask
from flask import request

app = flask.Flask(__name__)
port = 4057

@app.route('/search', methods=['POST'])
def search():
  request.json['query']
  results = ['fake', 'data']
  return flask.jsonify(results)

if __name__ == '__main__':
 app.config['TEMPLATES_AUTO_RELOAD'] = True
 app.run(host='0.0.0.0', port=port, debug=(port != 80))
Run Code Online (Sandbox Code Playgroud)

我有一个这样定义的简单客户端:

import json

import requests

headers = {'content-type': 'application/json'}
resp = requests.post('http://localhost:4057/search', json.dumps({'query': 'foo'}), headers=headers)
print resp.content
Run Code Online (Sandbox Code Playgroud)

客户端可以工作,但完成请求大约需要 3 秒钟。

curl 在半秒内完成:

curl 'http://localhost:4057/search' -H 'Content-Type: application/json' -d '{"query": "foo"}'

sal*_*ise 10

尝试127.0.0.1可能有一些奇怪的名称解析规则在摸索请求。

啊好吧,这是我的工作机器。我查看了 /etc/hosts 并看到了大约 200 条我没有意识到的路由定义

正如评论中提到的,这并不能解释使用curl.

  • 我不认为这个答案基本上解决了这个问题。这个问题很有趣,所以我进行了广泛的搜索。有一个可能的原因。由于现代操作系统通常同时支持 ipv6 和 ipv4,“localhost”首先解析为 ipv6 地址,但在默认超时窗口(通常为一秒)中失败,然后回退到 ipv4 地址。奇怪的是 curl 效果很好,也许它更适合 ipv4?或者这个原因也不是重点。 (4认同)