1、简介:

Flask 默认是单进程,单线程阻塞的任务模式,在项目上线的时候可以通过nginx+gunicorn 的方式部署flask任务。

app.run()中可以接受两个参数,分别是threaded和processes,用于开启线程支持和进程支持

1.threaded : 多线程支持,默认为False,即不开启多线程;
2.processes:进程数量,默认为1.

开启方式:

if __name__ == '__main__':app.run(threaded=True)# app.run(processes=True)

注意:多进程或多线程只能选择一个,不能同时开启。
processes=num 使用报错了,ValueError: cannot have a multithreaded and multi process server,将num改为True就可以使用flask框架的多进程了。

2、多进程和多线程的对比

2.1多进程(processes)

进程其实是资源的分配的单位,包括代码、内存、CPU等等,多进程类似程序的多开,比如qq的多开。

下图解释了多进程工作的原理,在主进程下,子进程1和子进程2分别复制了主进程的代码以及资源,而子进程1则只运行test1这个函数,子进程2则只运行test2这个函数,进程之间的全局变量互不影响对资源的开销比较大。当主进程结束后,所有的子进程全部结束,而子进程之间互不影响。

2.2、多线程

在一个进程中我们也可以使用多任务,这就是线程,线程其实是操作系统资源调度的单位。多线程可以共享全局变量。

多线程并不会复制主进程的代码和资源,而是共享全局变量,相比多进程来说,资源开销更加小。在同一时间,子线程1和子线程2同时运行,实现多任务,而他们会共享全局变量
例如设置一个全局变量,子线程让他+1后打印,另一个子线程打印也是+1后的数值。

2.3多线程和多进程的选择使用

如果你对自己的硬件资源很自信,那么就选择多进程。因为多进程占用资源比较多,因为其全局变量不共享,内存中存储多个相同变量。
但如果你的代码逻辑很复杂,一些变量产生了问题,那么就不要用多线程了,宁愿使用多一些资源也不要产生故障。

3.flask 后台运行

nohup python run.py >log.txt 2>&1 &

将.py文件更换成我们自己的就可以了。这里仅仅是后台运行,但是我们如果希望确保重启和服务器变动之后也保持运行,则需要添加到开机启动项中。
如果我们在服务器中运行某些脚本且设定需要一直运行状态,但是如果因为我们自己或者服务器不稳定导致重启,会导致工具无法运行。

Linux查看并杀死被占用的端口:

yum install -y lsof //安装lsof
sudo apt-get install lsof    //安装lsof
sudo lsof -i:端口号      //查找对应的进程号
sudo kill -9 进程号      //杀死对应的进程

flask好像在高并发上效果不太好,容易崩。建议使用gunicorn部署flask,并发大一点

清华源 + pip下载速度加快

pip install package_name -i https://pypi.tuna.tsinghua.edu.cn/simple

Linux查看占用GPU的进程

sudo fuser -v /dev/nvidia*

或者

pip install gpustat -i https://pypi.tuna.tsinghua.edu.cn/simple

然后输入gpustat

flask 多进程/多线程 解决高并发问题相关推荐

  1. python如何解决高并发_Flask 处理高并发、多线程

    前言: 使用flask做服务时,可以使用python run.py的方式运行,但是这样不能用于生产环境,可能会出现连接无响应的情况.后来通过查找资料,发现flask服务处理多线程.高并发的一下方法,主 ...

  2. Flask+Gunicorn(协程)高并发的解决方法探究

    <div> 1.使用Flask的做服务器框架,可以以python code.py的方式运行,但这种方式不能用于生产环境,不稳定,比如说: 有一定概率遇到连接超时无返回的情况 1,通过设置a ...

  3. flask多进程多线程配置

    flask.Flask.run接受**options转发给它的其他关键字参数()werkzeug.serving.run_simple-其中两个参数是threaded(布尔值)和processes(您 ...

  4. java多线程实例_多线程&高并发(全网最新:面试题+导图+笔记)面试手稳心不慌...

    前言 当你开始开始去跳槽面试的时候,明明只是一份15K的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是现在 ...

  5. 多线程&高并发(全网最新:面试题 + 导图 + 核心学习笔记)面试手稳心不慌,轻松拿下 offer,秋招跳槽必不可少的底层能力

    前言 当你开始开始去跳槽面试的时候,明明只是一份 15K 的工作,却问你会不会多线程,懂不懂高并发,火箭造得让你猝及不防,结果就是凉凉:现如今市场,多线程.高并发编程.分布式.负载均衡.集群等可以说是 ...

  6. 多线程与高并发基础一(超发--多线程悲观锁,乐观锁、类数据库悲观锁乐观锁)

    PS:看完文章后对自己以前所做过的并发和锁机制有了深入原理的了解. 知其然和知其所以然! 遂以记之! 关键词: 线程,同步,单例,高并发,高访问,死锁 一.大规模并发带来的挑战 在过去的工作中,我曾经 ...

  7. 【闲聊杂谈】直击重灾区 - 多线程与高并发

    在开始学习多线程与高并发的知识之前,我想先问一个问题:你平时在写代码的时候,有没有刻意的去思考如何压榨CPU性能?其实纵观整个编程的发展历史,其实就是一部对于CPU性能压榨的血泪史. 单进程人工切换 ...

  8. asp.net怎样解决高并发问题

    队列+多线程+couchbase缓存 ,解决高并发问题. using System; using System.Collections.Generic; using System.Linq; usin ...

  9. 转发:php解决高并发

    php解决高并发(转发:https://www.cnblogs.com/walblog/articles/8476579.html) 我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Pe ...

最新文章

  1. 看过来,包邮送AirPods Pro!
  2. python tk text scrollbar_tk.Scrollbar控件的使用
  3. 【light 1341Aladdin and the Flying Carpet】
  4. 在河北当中学老师用不用考计算机,河北省教育厅出台新方案 师范生当教师也需考证...
  5. 阿里云助力完美日记半年内系统吞吐量提升50倍
  6. Android10打断动画,Android开发(10) 动画(Animation)
  7. centos7.5 su: 无法设置组: 不允许的操作(实测补充)(这是乱获取权限导致的,要注意权限问题)以及推荐文件操作
  8. cocos2dx windows phone平台下CCLabelTTF自己主动换行的实现
  9. 在SharePoint Server 2007中创建定制的用户管理模块
  10. Ubuntu 16.04安装crossover17 并安装 TIM
  11. Protel 99 SE 应用技术问答
  12. word2019 分页、分节(即分节符下的分页)、页码、页眉设置最佳实践
  13. BitTorrent 性能卓越的原因
  14. 用java实现猜数字游戏程序:基础、偏移、三次机会、是否继续玩
  15. android studio logcat 字体,android studio - 修改logcat颜色字体
  16. Logger.error不打印错误堆栈信息问题
  17. 用c语言实现图书信息管理系统
  18. turtle---见证小海龟的浪漫之画
  19. 项目管理十大知识领域(八)--- 项目干系人管理(过程、输入、工具和技术、输出)
  20. java毕业论文_【毕业论文】基于java的博客网站设计与开发毕业论文(word文档)

热门文章

  1. php数组批量赋值_php给数组赋值的实例方法
  2. 解开最后期限的镣铐(转载)
  3. 多语言通信基础 03 go和python的rpc通信
  4. JavaScript 三角形常用数学方法封装
  5. 统计|假设检验中的P值(pvalue)如何看/怎样理解
  6. Android多屏幕适配-手机
  7. 无忌上一位放弃佳能转投宾得的网友的文章
  8. libsodium ios编译
  9. GPT-4 开启 “软件工程3.0” 全新时代
  10. Redash 可视化BI系统部署安装及简单使用