为什么我的 Tornado/Flask 服务器在收到请求时会在 Windows 上阻塞并死机?
Why does my Tornado/Flask server choke and die on Windows when hammering it with requests?
我在 Windows - Tornado 运行 上有一个简单的测试应用程序,它是一个 Flask wsgi 应用程序。我可以很好地启动服务器并通过我的网络浏览器连接,这很酷。
我可以 运行 我的性能测试,在我的机器上我每秒收到大约 900-1000 个请求。但是,在大约 20,000 个请求之后,我的服务器停止响应并且我的测试报告每秒为 0。我可以尝试通过网络浏览器连接,但没有任何连接。通常 ctrl+c 也有一些问题(在浏览器中刷新页面之前必须多次点击它会像往常一样结束服务器) .
那么,为什么我的服务器在我这样敲打时会卡死?
好的,所以在尝试排除不同因素的过程中 - 我能够从另一台机器访问服务器,即使我的本地机器正在呕吐所以它看起来实际上是我的本地机器 运行宁出港口什么的?
无论如何,这是我的代码:
server.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
return "Hey, it's working"
if __name__ == "__main__":
app.run("0.0.0.0", port=5000, debug=True)
龙卷风_server.py
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from server import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
perftest.py
from socket import *
import time
n = 0
stop = False
from threading import Thread
def monitor():
global n, stop
while not stop:
time.sleep(1)
print(n, 'reqs/sec')
n = 0
if __name__ == "__main__":
t = Thread(target=monitor).start()
while True:
try:
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(('localhost', 5000))
sock.send(b'''GET / HTTP/1.1\n\n''')
resp = sock.recv(4096)
sock.close()
n += 1
except KeyboardInterrupt:
stop = True
except:
pass
我猜你 运行 没有端口了。您建立的每个连接都会阻塞一个端口,并且关闭它们需要一些时间,在 Windows 上比在其他操作系统上要长。作为一个症状,一段时间后应该会有所收获,但只是不久。
您可以使用 netstat
进行检查。
我在 Windows - Tornado 运行 上有一个简单的测试应用程序,它是一个 Flask wsgi 应用程序。我可以很好地启动服务器并通过我的网络浏览器连接,这很酷。
我可以 运行 我的性能测试,在我的机器上我每秒收到大约 900-1000 个请求。但是,在大约 20,000 个请求之后,我的服务器停止响应并且我的测试报告每秒为 0。我可以尝试通过网络浏览器连接,但没有任何连接。通常 ctrl+c 也有一些问题(在浏览器中刷新页面之前必须多次点击它会像往常一样结束服务器) .
那么,为什么我的服务器在我这样敲打时会卡死?
好的,所以在尝试排除不同因素的过程中 - 我能够从另一台机器访问服务器,即使我的本地机器正在呕吐所以它看起来实际上是我的本地机器 运行宁出港口什么的?
无论如何,这是我的代码:
server.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
return "Hey, it's working"
if __name__ == "__main__":
app.run("0.0.0.0", port=5000, debug=True)
龙卷风_server.py
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from server import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
perftest.py
from socket import *
import time
n = 0
stop = False
from threading import Thread
def monitor():
global n, stop
while not stop:
time.sleep(1)
print(n, 'reqs/sec')
n = 0
if __name__ == "__main__":
t = Thread(target=monitor).start()
while True:
try:
sock = socket(AF_INET, SOCK_STREAM)
sock.connect(('localhost', 5000))
sock.send(b'''GET / HTTP/1.1\n\n''')
resp = sock.recv(4096)
sock.close()
n += 1
except KeyboardInterrupt:
stop = True
except:
pass
我猜你 运行 没有端口了。您建立的每个连接都会阻塞一个端口,并且关闭它们需要一些时间,在 Windows 上比在其他操作系统上要长。作为一个症状,一段时间后应该会有所收获,但只是不久。
您可以使用 netstat
进行检查。