Flask中的多线程和线程隔离

Flask中的多线程和线程隔离,第1张

概述一、线程、进程 线程:cpu调度的基本单位。是进程的一部分,能够访问进程的资源,线程间的切换,资源消耗相对少。 进程:系统内存资源分配的基本单位。进程的切换需要保存应用的执行状态(应用的上下文),相对于线程,进程切换的开销大。 二、Flask开启多线程、多进程 flask自带的服务器默认是单进程、单线程; 多线程:app.run(...., threader=True) 多进程:app.run(.

一、线程、进程

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

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

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

三、Flask多线程

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

四、线程隔离

通过字典的思想实现线程隔离。线程的ID作为keyRequest对象作为value Flask中通过第三方库werkzeug中的local模块Local对象实现线程隔离。
import threading    import timefrom werkzeug.local import Localmy_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)
总结

以上是内存溢出为你收集整理的Flask中的多线程和线程隔离全部内容,希望文章能够帮你解决Flask中的多线程和线程隔离所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1190701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存