我写了一个简单的Flask应用程序,它将从视频源返回最新的图像。视频源正在线程上运行。 Flask appp与gevent一起部署。客户端每5秒发出一次GET请求(当前为5秒,因为图像传输速度很慢)。图像在50到60 KB之间,通常需要3到5秒才能传输。这是一个本地网络,所以我希望速度更快。我应该注意一些优化吗?
作为旁注,我还使用了Flask-SocketIO网页框,并且传输速度也有同样的问题。
应用代码:
from gevent import monkey
monkey.patch_all()
from gevent.wsgi import WSGIServer
from flask import Flask, send_file, render_template
import threading
from cStringIO import StringIO
app = Flask(__name__)
img = StringIO()
def save_video():
global img
jpg_frame = some_image_source()
img.reset()
img.write(jpg_frame)
img.truncate()
@app.route("/")
def hello():
return render_template('index.html')
@app.route('/image<rand_num>')
def get_image(rand_num):
global img
new_img = StringIO(img.getvalue())
return send_file(new_img, mimetype='image/jpg')
if __name__ == "__main__":
imgthread = threading.Thread(target=save_video)
imgthread.daemon = True
imgthread.start()
http_server = WSGIServer(('0.0.0.0', 9090), app)
http_server.serve_forever()
我使用随机数发送请求,以便浏览器不会获取缓存的图像。我在HTML正文中的客户端代码(头只有标题):
<script>
setInterval(function() {
var myImageElement = document.getElementById('myImage');
myImageElement.src = '/image' + Math.random();
}, 5000);
</script>
<img src="/image0" id="myImage" />