Python Flask + Tornado 请求很慢的接口导致全站无法访问,有什么解决方法么?
source link: https://www.v2ex.com/t/795550
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
第一次写 Flask,一个网页返回前需要请求一个要 5s 左右才能返回结果的接口,对方要求不能用 ajax,但一旦发起请求到请求完成前全站就无法打开了。按 Google 上找的教程做了多线程,但请求量大还是会导致全站无法打开,CPU 占用只有不到 1%,请问有什么解决方法么?
第 1 条附言 · 23 小时 19 分钟前
theklf4 1 天前
@wzwwzw #3 感谢回复,已经用了 Tornado,按 Google 上的说法 Tornado 已经包含了一个异步 WSGI server,请问还有必要用 gunicorn 么?
rationa1cuzz 23 小时 54 分钟前
theklf4 23 小时 44 分钟前
vicalloy 23 小时 34 分钟前
server.bind(8888)
server.start(0) # forks one process per cpu
IOLoop.current().start()
把 server.start(0)改成 99
你的 web 服务器是单进程&单线程模式,一次只能有一个实例,你得想办法把线程 /进程数改打。
前面说到 asyncio 是行不通的,asyncio 有传播性,除非你的应用本身就是 asyncio 写的,不然不会有任何改善。
stach 23 小时 12 分钟前 3
- 2. 百度一下怎么用 gevent monkey patch flask
- 3. 最好用 gunicorn 部署 flask
tisswb 23 小时 10 分钟前
tonghuashuai 23 小时 5 分钟前 1
1. 保持单线程,但 fork 多个进程,类似于启动多个你这个服务,#11 楼的办法可以参考下,或者 gunicorn 替换 tornado,gunicorn --workers=4 main:app (启动 4 个 worker 进程,也就是能支持 4 个请求同时访问你的耗时接口)
2. 改进,多进程多线程,gunicorn 替换 tornado (考虑加 gevent ),gunicorn --workers=4 --threads=4 main:app,并发请求数就是 worker * 线程
no1xsyzy 22 小时 25 分钟前
拿 tornado 作框架你需要手动新建线程池或者 ThreadPoolExecutor
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK