当前位置: 首页 > news >正文

flask多并发

多线程

flask默认使用多进程处理请求,因此,是支持并发的。比如两个调用a.html和b.html,

  • 请求a.html未运行完成,在浏览访问b.html不会阻塞。
  • 开两个不同浏览器,分别请求请求运行时间较长的a.html也不阻塞。只要不用一个浏览去调,它都是不阻塞的;如果开一个浏览器在不同tab页请求同一阻塞页面,则会阻塞,这是浏览器引起的。

WSGI协议

WSGI是Web Server Gateway Interface的缩写,它是Python应用程序或者框架(如Flask)和web服务器之间的一种接口。flask默认使用werkzeug库实现WSGI协议。
只要实现了WSGI协议的任何web server都可以作为flask app的服务器,比如uWSGI, Gunicorn,mod_wsgi都可以替换Werkzeug作为 web server。

flask自带的多进程

  • 在app.run()时加入参数:threaded=False, processes=5, debug=False时,可使用5个进程。
  • 进入flash的app.run()函数内部,可以看到真正使用werkzeug库来实现后台服务。
  • flask自带的多进程有一个问题,每次请求时进程开启,该请求运行结束进程关闭,因此无法在每个进程中保留现场,每次都做初始化,也会浪费很多时间。

gunicorn

  • 如果想在flash一开始就启多个进程,可使用gunicorn
  • 做如下的test.py
from flask import Flask
app = Flask(__name__)@app.route("/")
def hello():return "Hello World!"

注意:使用gunicorn后,无需在程序中运行app.run()。

  • 运行命令
gunicorn -w 3 -b 0.0.0.0:8080 test:app

这里设成开启3个进程,0.0.0.0使得在docker内部启动的服务可在宿主机上被访问,test是py文件名,app是其中的flask服务名。此时,使用ps命令即可看到一开始就启动了多个进程。

参考

Flask: flask框架是如何实现非阻塞并发的

http://www.lryc.cn/news/42978.html

相关文章:

  • 我用Python django开发了一个商城系统,已开源,求关注!
  • 大数据项目之数仓相关知识
  • RK3588平台开发系列讲解(视频篇)RTP H264 码流打包详解
  • realloc的补充 柔性数组
  • 【C语言】柔性数组
  • 【Linux】权限详解
  • Android 之 打开相机 打开相册
  • C语言数据结构初阶(8)----栈与队列OJ题
  • JavaScript——原型对象
  • 网络安全 2023 年为什么如此吃香?事实原来是这样....
  • (源码篇02)webpack5中的事件调度系统和NormalModuleFactary核心逻辑
  • Vue2.x源码:new Vue()做了啥?
  • WinForm | C# 弹出简易的消息提示框 (仿Android Toast消息提示)
  • 1、DRF实战总结:DRF特点、序列化与RESTful API规范
  • SIP协议及其简单介绍
  • 安全防御第四天:防病毒网关
  • Postman接口与压力测试实例
  • TCP/IP socket
  • “工作三年,跳槽要求涨薪50%”,合理吗?
  • Vue学习计划九:了解Vue动画效果以及过渡动画和动态组件的使用方法
  • 【Linux】进程理解与学习Ⅲ-环境变量
  • 【三】一起算法---栈:STL stack、手写栈、单调栈
  • 电路设计的一些概念
  • 【Linux】Linux下权限的理解
  • Prometheus监控实战系列十七:探针监控
  • 题目:JPA的懒加载失效是什么情况?
  • 十六、消息推送
  • PMP项目管理-【第一章】引论
  • 前端布局小案例,分享3个漂亮的卡片组件
  • 博客重载记录