Python 在mProfile结果中,select.epoll会占用一半的系统时间,这正常吗?
我正在尝试优化python后端服务器。下面一个简单的cProfile文件显示,有一半的系统时间花在select.poll上 这是空烧瓶web服务器的另一个概要文件结果。 以下是服务器代码:Python 在mProfile结果中,select.epoll会占用一半的系统时间,这正常吗?,python,Python,我正在尝试优化python后端服务器。下面一个简单的cProfile文件显示,有一半的系统时间花在select.poll上 这是空烧瓶web服务器的另一个概要文件结果。 以下是服务器代码: from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello world' if __name__ == '__main__': app.run(debug=True,
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello world'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
问题:
1) 为什么我的代码使用了很多select.poll(),而默认Flask web服务器不使用select.poll()
我严重怀疑我的代码由于糟糕的体系结构而存在性能问题(运行时很慢),但我不知道问题出在哪里 这并不奇怪。如果应用程序是事件驱动的,它将花费大部分时间等待事件发生。它只是坐在
select.poll()
中,在一些数据到达某个文件描述符之前什么也不做。当有东西到达时,它会处理它,然后返回到调用select.poll()
的主循环,在一个占用太多CPU周期的循环中调用select.poll()也是如此?我知道如果我在浏览器控制台中尝试(true){},它将使我的浏览器崩溃。否select.poll()
是OSepoll()
系统调用的一个接口,它将进程置于睡眠状态,直到发生某些事情。正如我所说,进程什么都不做,没有循环。我更新了我的问题,以响应您的“OS epoll()系统调用,它将进程置于睡眠状态,直到发生某些事情”。为什么默认Flask web服务器不使用select.poll()?Flask更好吗?您应该看看Flask的源代码,看看它是如何工作的。在等待某些事情发生时,还有其他方法可以阻止进程。