Flask 是一个 Python 实现的 Web 开发微框架。如何用它实现传送视频数据流呢?Flask应用拥有这样一种能力,以分割成小数据块的方式,高效地为大型请求提供数据。
什么是流媒体?
流媒体是一种技术,其中,服务器以数据块的形式响应请求。我能想到一个原因来解释为什么这个技术可能是有用的:
非常大的响应 。对于非常大的响应而言,内存中收集的响应只返回给客户端,这是很低效的。另一种方法是将响应写入磁盘,然后使用flask.send_file()返回文件,但是这增加了I/O的组合。假设数据可以分块生成,以小块数据的方式给请求提供响应是一种更好的解决方案。
实时数据 。对于一些应用,需要请求返回的数据来自实时数据源。
使用Flask实现流式传输
Flask通过使用生成器函数对流式响应提供本机支持。生成器是一个特别的函数,它可以中断和恢复。考虑一下下面的函数:def gen():
yield 1
yield 2
yield 3
这是一个运行三步的函数,其中每步返回一个值。描述生成器如何实现超出了本文的范围,但如果你有点好奇,下面的shell会话将给你说明生成器是如何被使用的:>>> x = gen()
>>> x
>>> x.next()
1
>>> x.next()
2
>>> x.next()
3
>>> x.n