0
点赞
收藏
分享

微信扫一扫

Elasticsearch 精确查询:术语查询、多术语查询、主键查询、范围查询、存在查询、前缀查询、正则查询与通配符查询

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

前言

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

结语

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

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

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

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

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

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

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

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

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

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

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

举报

相关推荐

0 条评论