加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Flask中的多线程和线程隔离

发布时间:2020-12-20 10:22:09 所属栏目:Python 来源:网络整理
导读:一、 线程、进程 线程: cpu 调度的基本单位。是进程的一部分,能够访问进程的资源,线程间的切换,资源消耗相对少。 进程:系统内存资源分配的基本单位。进程的切换需要保存应用的执行状态(应用的上下文),相对于线程,进程切换的开销大。 二、Flask 开启

一、线程、进程

  1. 线程:cpu调度的基本单位。是进程的一部分,能够访问进程的资源,线程间的切换,资源消耗相对少。
  2. 进程:系统内存资源分配的基本单位。进程的切换需要保存应用的执行状态(应用的上下文),相对于线程,进程切换的开销大。

二、Flask开启多线程、多进程

  1. flask自带的服务器默认是单进程、单线程;
  2. 多线程:app.run(....,threader=True)
  3. 多进程:app.run(....,processes=1)

三、Flask多线程

  1. 单线程:request---->请求1 Request请求2?Request....。请求顺序执行,request总是指向当前请求。
  2. 多线程:request---->{请求1 Request,请求2 Request....}。多线程的情况下,在某一时间多个请求会同时存在,此时不清楚request指向哪个请求,带来的问题是造成数据的污染。解决的办法是通过线程隔离,实现数据的独立。

四、线程隔离

  1. 通过字典的思想实现线程隔离。线程的id作为keyRequest对象作为value
  2. Flask中通过第三方库werkzeug中的local模块Local对象实现线程隔离。
import threading    
import time

from werkzeug.local import Local

my_1 = Local()
my_1.b = 0

# 新线程中,b的值被修改
def worker():
    my_1.b = 1
    print(my_1.b)


new_t = threading.Thread(target=worker)
new_t.start()
time.sleep(1)

# 主线程中,b的值没有改变
print(my_1.b)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读