我用 flask ,就一行渲染页面的代码,渲染的页面也基本纯 html 没有其他的东西,没有外链,为什么有时候要几百毫秒来渲染,多刷新几下又只需要几十毫秒,再刷新又变回几百毫秒反复,对于一个输出验证码图片的接口调用更是一快一慢很有规律……以下是我的代码:
from flask import Flask,Blueprint,redirect,url_for,render_template,send_file,make_response,session
from io import BytesIO
import random
import string
from wheezy.captcha.image import *
home = Blueprint("home",__name__)
@home.route("/")
def index():
return render_template("home/index.html")
@home.route("/v")
def v():
captcha_image = captcha([background(),
text(fonts=['arial.ttf'],
font_sizes=[46],
drawings=[warp(),
rotate(),
offset()]),
curve(),
noise(),
smooth()],150,45)
vcode = random.sample(string.ascii_letters + "".join([str(x) for x in range(0,10)]),4)
image = captcha_image(vcode)
out = BytesIO()
image.save(out, 'jpeg', quality=20)
image.close()
out.seek(0)
resp = make_response(send_file(out,"image/jpeg"))
resp.headers["cache-control"] = "no-cache"
session["vcode"] = "".join(vcode)
return resp
if __name__ == '__main__':
import os
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
app.debug = True
app.run(HOST, PORT)
1
cloverstd 2016-05-26 17:42:43 +08:00 2
貌似 Flask 自带的 server 默认是单线程的,你试试 app.run(host="0.0.0.0", port=8080, threaded=True)
http://flask.pocoo.org/docs/0.10/api/#flask.Flask.run http://werkzeug.pocoo.org/docs/0.11/serving/#werkzeug.serving.run_simple |
2
Aether 2016-05-26 18:08:52 +08:00
跑正式服务器试试。
|
3
yamada OP 单线程也不应该这样啊,感觉和单线程没关系
我目前还不知道怎么部署正式服务器,也没有正式服务器,现在只是在自己开发的时候发现这种问题,不知道是什么原因 |
4
yamada OP |
6
kxxoling 2016-05-26 18:25:18 +08:00
Jinja2 有缓存的,我的页面初次渲染大概是 120ms ,之后每次只需要 10ms 左右。
|
7
Zzzzzzzzz 2016-05-26 18:37:10 +08:00
werkzeug 有个 ProfilerMiddleware, 加载一下看看输出
|
8
Kilerd 2016-05-26 18:42:42 +08:00
debug 模式慢其实很正常, 生产环境用 gunicorn 和 gevent 的话 会好很多。
|
9
yamada OP |
10
DoctorCat 2016-05-27 01:06:46 +08:00
return resp 打个断点,然后看下生成验证码时耗时(代码段执行期间的耗时),反复生成几次,对比下这段时间耗时
|
13
yamada OP 又碰到一个奇怪的问题,在公司电脑一切 OK ,在家里电脑运行,刷新任何页面几次以后会卡死, chrome 一直在转圈,加上 threaded=True 就好了,比较迷……
|