Python 3 的 http.server.HTTPServer 在本地主机上有一秒的延迟

Python 3's http.server.HTTPServer has a one second delay on localhost

我在同一个盒子上安装了客户端和服务器 运行。客户端能够向外部 URL 发出 urllib.request.Request() 命令并在大约 0.1 秒内获得响应,速度足够快,作为用户我不会注意到任何真正的延迟。当向我的本地 http.server.HTTPServer() 发出 Request() 时,客户端调用 urllib.request.urlopen() 和服务器 do_GET(self) 甚至收到请求之间有 1 秒的延迟。

我看到一些答案表明这是用于日志记录的 DNS 查找的问题,覆盖 address_string(self) 会解决它,但无论是否进行修改,我仍然看到完全相同的延迟。

服务器:

import http.server
import time

class MyHTTPHandler(http.server.BaseHTTPRequestHandler): 
    def do_GET(self):
        start = time.time()
        print(start)
        self.send_response(200)
        self.end_headers()

    def address_string(self):
        host, port = self.client_address[:2]
        return host  

server = http.server.HTTPServer(('localhost', 9999), MyHTTPHandler)
try:
    server.serve_forever()
except KeyboardInterrupt:
    print('Stopping server')

客户:

import urllib.request
import urllib.error
import time

def send_data():
    start = time.time()
    r = urllib.request.Request(url='http://localhost:9999')
    print(time.time())
    urllib.request.urlopen(r)
    print(time.time() - start)

while True:
    input('Press enter to send')
    send_data()

有什么想法可以消除那一秒钟的延迟吗?我希望这个基本服务器的响应速度至少与 Web 服务器一样快。

好的,看来这可能是 Python 版本的问题。

运行 Python 3.5.2 for Windows 我得到了 1 秒的延迟。 运行 Python 3.4.3 for Ubuntu(技术上 Ubuntu for Windows)我没有延迟。

这可能看起来很奇怪,但请尝试在您的客户端中使用 127.0.0.1 而不是 localhost。