Local对象隔离线程间的对象_即ThreadLocal变量
Local对象
在Flask中,类似于request
对象,其实是绑定到了一个werkzeug.local.Local
对象上。
这样,即使是同一个对象,那么在多个线程中都是隔离的。
类似的对象还有session
以及g
对象。
flask=werkzeug + sqlalchemy + jinja2
ThreadLocal变量
Python
提供了ThreadLocal
变量,它本身是一个全局变量,但是每个线程却可以利用它来保存属于自己的私有数据,这些私有数据对其他线程也是不可见的。
总结:
只要满足绑定到local
或Local
对象上的属性,在每个线程中都是隔离的,那么他就叫做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)