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。
我在同一个盒子上安装了客户端和服务器 运行。客户端能够向外部 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。