【Python进阶实战】Flask接口并发实现
- 前言
- Flask阻塞接口
- 接口实现
- 接口阻塞
- Flask并发接口
- 接口实现
- 接口并发
- 服务部署
- Windows部署
- Linux部署
- gunicorn安装
- gunicorn运行
- 结语
前言
Python版本:3.12.3
IDE:Pycharm 2024.1
对于Flask接口阻塞问题,在网上搜寻许久,没有人写一个完整简洁的说明
对于经常使用Flask框架写接口的人来说,接口阻塞问题一直是一块心病
这边将会比较简单明了的说明Flask框架的接口并发是如何实现的
也就是当一个接口阻塞的时候,并不影响其他接口的调用
如果想详细了解Flask框架的话,可以访问下面传送门:
【Flask框架详细介绍】传送门
如果是初学者还不知道怎么安装Flask框架,请访问下面传送门:
【Flask框架官方中文安装教学】传送门
Flask阻塞接口
如果想直接看Flask并发接口实现
可以直接在目录选择【Flask并发接口】直接跳转
接口实现
我们先实现两个最基本的Flask接口,代码如下:
from time import sleep
from flask import Flask
app = Flask(__name__)
# GET请求
@app.route('/get1', methods=['GET'])
def get1():
# 访问该请求时,阻塞10秒,用来测试接口阻塞
sleep(10)
return 'Tony'
@app.route('/get2', methods=['GET'])
def get2():
# 接口get2不延迟,用来判断阻塞
return 'Winnie'
if __name__ == '__main__':
# Flask服务器启动,为了方便测试,把debug设置为True
app.run(host='0.0.0.0', port=8080, debug=True))
debug=True:这开启了调试模式,它提供了以下几个有用的特性:
- 服务器会在代码修改后自动重新加载。
- 当发生错误时,会显示一个交互式的调试器。
- 日志记录级别被设置为DEBUG,这意味着你会看到更多的输出信息。
运行时控制台日志如下:
运行地址显示后,代表运行成功(运行地址如下)
- Running on http://127.0.0.1:8080
接口阻塞
这时候,可以打开你的Postman进行接口测试
或用你的浏览器访问以下地址:
- http://127.0.0.1:8080/get1
- http://127.0.0.1:8080/get2
直接点击下面传送门可直接测试
- get1传送门
- get2传送门
当你访问 http://127.0.0.1:8080/get1 接口时
10秒内访问 http://127.0.0.1:8080/get2,这时这个接口是阻塞的
Flask并发接口
接口实现
from time import sleep
from flask import Flask
app = Flask(__name__)
# GET请求
@app.route('/get1', methods=['GET'])
def get1():
# 访问该请求时,阻塞10秒,用来测试接口阻塞
sleep(10)
return 'Tony'
@app.route('/get2', methods=['GET'])
def get2():
return 'Winnie'
if __name__ == '__main__':
# 代码区别在于这边,运行参数最后增加 threaded=True,代表多线程运行
app.run(host='0.0.0.0', port=8080, debug=True, threaded=True)
代码运行后的控制台日志和上面无异
关键在于 app.run() 中的 threaded=True 参数
这个参数使得Flask使用多线程来处理请求
接口并发
直接点击下面传送门可直接测试
- get1传送门
- get2传送门
这时当访问get1阻塞时
在10秒内访问get2,可以正常返回内容
服务部署
Flask官方不推荐使用app.run()这种方式直接部署到生产环境使用
但是如果并发量小的项目,偷偷懒直接打包使用也是没什么大碍的
Windows部署
这边简单提醒一下,还在用Python老版本的朋友们
Python 3.9版本(包括 3.9)以后需要Windows 8.1或更高版本的系统支持
请注意,即使 Python 3.8 支持 Windows 7,官方也推荐使用最新版本的 Windows 以获得最佳性能和安全性
如果你正在使用 Windows 7,并且需要在上面运行 Python,建议安装 Python 3.8 版本
同时,由于 Windows 7 已经停止了微软的官方支持,为了系统安全,建议升级到更新的操作系统版本
关于Windows部署,使用打包工具pyinstaller打包成exe部署
使用说明传送门:【Python实战】python打包工具pyinstaller详解
Linux部署
官方推荐使用WSGI服务器
因为Python内置的WSGI Server无法实现并发的场景
这边推荐gunicorn服务器,gunicorn服务器也是基于WSGI Server构建的
gunicorn安装
Python安装版本要求:Python >= 3.7
安装命令如下:
pip install gunicorn
gunicorn运行
运行命令如下:
gunicorn -w 4 -b 0.0.0.0:8080 app:app
“-w 4”代表使用的是4个工作(worker)进程,按照项目的需求进行配置
“-b 0.0.0.0:8080"代表的是绑定(bind)到本机地址的 8080 端口
”app:app“ 表示 Gunicorn 应该从 app.py 文件中导入名为 app 的应用程序实例
这条命令无法在Windows操作系统下使用,运行时会提示会缺少“fcntl”模块
运行结果如下:
[2014-09-10 10:22:28 +0000] [30869] [INFO] Listening at: http://127.0.0.1:8080 (30869)
[2014-09-10 10:22:28 +0000] [30869] [INFO] Using worker: sync
[2014-09-10 10:22:28 +0000] [30874] [INFO] Booting worker with pid: 30874
[2014-09-10 10:22:28 +0000] [30875] [INFO] Booting worker with pid: 30875
[2014-09-10 10:22:28 +0000] [30876] [INFO] Booting worker with pid: 30876
[2014-09-10 10:22:28 +0000] [30877] [INFO] Booting worker with pid: 30877
官方推荐用Nginx服务器做代理转发,这样对gunicorn服务器比较安全高效
官方文档传送门:gunicorn官方文档
结语
在这片技术的海洋中,每一篇博客都是一盏灯塔,照亮求知的航程。
对我而言,撰写博客不仅是一种分享,更是一份热爱与执着。
每当看到读者留言,提到通过我的文章解决了困扰他们已久的技术难题,那份喜悦和成就感便油然而生。这,就是我的动力源泉。
我相信,技术的魅力在于它的普惠性。
无论是初学者还是资深开发者,我们都在这个不断进化的领域中探索和学习。
我乐于分享我的知识,也渴望从你的经验中汲取智慧。
让我们一起,以代码为桥,以创新为帆,携手在这技术的广阔天地中遨游。
所以,无论你何时遇到难题,无论问题大小,都欢迎你来找我。
在这里,我们共同进步,共同成长。
记住,技术之路或许崎岖,但绝对值得。我将与你们同在,一起攀登技术的高峰,一起书写属于我们的精彩篇章!
我是爱弹吉他的小盆友,很高兴能够帮助到您!