Flask 是同步框架,到底意味着什么?一个 worker 能同时处理几个请求?线程和进程哪个对等待有帮助、哪个对计算有帮助?这篇用真实的 gunicorn 与开发服务器,把等待型和计算型两种负载各跑一遍。
gunicorn sync,1 个 worker 总耗时 8.05 秒 | 用到 1 个进程、1 个线程 | 全部 200: True gunicorn sync,4 个 worker 总耗时 2.02 秒 | 用到 4 个进程、1 个线程 | 全部 200: True gunicorn gthread,1 个 worker × 8 线程 总耗时 1.02 秒 | 用到 1 个进程、8 个线程 | 全部 200: True flask run(开发服务器,默认多线程) 总耗时 1.01 秒 | 用到 1 个进程、8 个线程 | 全部 200: True flask run --without-threads 总耗时 8.09 秒 | 用到 1 个进程、1 个线程 | 全部 200: True
上一篇:信任代理头配置;下一篇:Flask Async View。
gunicorn sync,1 个 worker 总耗时 1.43 秒 | 用到 1 个进程 gunicorn sync,4 个 worker 总耗时 0.40 秒 | 用到 4 个进程 gunicorn gthread,1 个 worker × 8 线程 总耗时 1.43 秒 | 用到 1 个进程 flask run(开发服务器,默认多线程) 总耗时 1.44 秒 | 用到 1 个进程 (本机 CPU 核数: 10 )
gunicorn sync,1 个 worker 慢请求(2 秒)进行中,一个只要 0 秒的请求用了 1706 ms gunicorn gthread,1 个 worker × 8 线程 慢请求(2 秒)进行中,一个只要 0 秒的请求用了 5 ms
8 个并发请求在同一个进程的 8 个线程里,各自读回自己写进 g 的值,读错的有 0 个