select.epoll在mProfile结果中消耗系统时间的一半是正常的吗?

时间:2019-05-08 20:33:48

标签: python

我正在尝试优化python后端服务器。 this example之后的简单cProfile显示了系统时间的一半花费在select.poll上。

enter image description here

这是空的烧瓶Web服务器的另一个概要文件结果。 这是服务器代码:

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')

enter image description here

问题:

1)为什么我的代码使用大量的select.poll()而默认的Flask Web服务器不使用select.poll()?

我严重怀疑我的代码由于体系结构不良而存在性能问题(运行时速度很慢),但是我不知道问题出在哪里。

1 个答案:

答案 0 :(得分:1)

这并不奇怪。如果应用程序是事件驱动的,它将花费大部分时间等待事件发生。它只是坐在select.poll()中,直到某些数据到达文件描述符之一之前,它什么也不做。当有东西到达时,它会对其进行处理,然后返回到调用select.poll()的主循环。