【Python进阶实战】Flask接口并发实战

发布于:2024-04-27 ⋅ 阅读:(19) ⋅ 点赞:(0)

前言

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

直接点击下面传送门可直接测试

当你访问 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阻塞时

在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官方文档

结语

在这片技术的海洋中,每一篇博客都是一盏灯塔,照亮求知的航程。

对我而言,撰写博客不仅是一种分享,更是一份热爱与执着。

每当看到读者留言,提到通过我的文章解决了困扰他们已久的技术难题,那份喜悦和成就感便油然而生。这,就是我的动力源泉。

我相信,技术的魅力在于它的普惠性。

无论是初学者还是资深开发者,我们都在这个不断进化的领域中探索和学习。

我乐于分享我的知识,也渴望从你的经验中汲取智慧。

让我们一起,以代码为桥,以创新为帆,携手在这技术的广阔天地中遨游。

所以,无论你何时遇到难题,无论问题大小,都欢迎你来找我。

在这里,我们共同进步,共同成长。

记住,技术之路或许崎岖,但绝对值得。我将与你们同在,一起攀登技术的高峰,一起书写属于我们的精彩篇章!

在这里插入图片描述
我是爱弹吉他的小盆友,很高兴能够帮助到您!