一、线程、进程
线程: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作为key,Request对象作为value。 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)
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did170703