Flask框架之ThreadLocal变量

青春壹個敷衍的年華 提交于 2020-01-19 02:27:14

Local对象隔离线程间的对象_即ThreadLocal变量

Local对象

在Flask中,类似于request对象,其实是绑定到了一个werkzeug.local.Local对象上。

这样,即使是同一个对象,那么在多个线程中都是隔离的。

类似的对象还有session以及g对象。

flask=werkzeug + sqlalchemy + jinja2


ThreadLocal变量

Python提供了ThreadLocal变量,它本身是一个全局变量,但是每个线程却可以利用它来保存属于自己的私有数据,这些私有数据对其他线程也是不可见的。


总结:
只要满足绑定到localLocal对象上的属性,在每个线程中都是隔离的,那么他就叫做ThreadLocal对象,也叫ThreadLocal变量。


python中的线程


from threading import Thread,local 

local =local() 
local.request = '具体用户的请求对象' 

class MyThread(Thread): 
	def run(self): 
		local.request = 'wukong' 
		print('子线程:',local.request) 
		mythread = MyThread() 
		mythread.start() 
		mythread.join() 
		print('主线程:',local.request)
		

Flask中的线程


from werkzeug.local import Local 

local = Local() 
local.request = '具体用户的请求对象' 

class MyThread(Thread): 
	def run(self): 
		local.request = 'wuneng' 
		print('子线程:',local.request) 
		mythread = MyThread() 
		mythread.start() 
		mythread.join() 
		print('主线程:',local.request)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!