Local对象隔离线程间的对象_即ThreadLocal变量
1.Local对象:
在Flask中,类似于`request`对象,其实是绑定到了一个`werkzeug.local.Local`对象上。
这样,即使是同一个对象,那么在多个线程中都是隔离的。类似的对象还有`session`以及`g`对象。
from werkzeug.local import Local #flask=werkzeug + sqlalchemy + jinja2
2.ThreadLocal变量:
Python提供了ThreadLocal 变量,它本身是一个全局变量,但是每个线程却可以利用它来保存属于自己的私有数据,这些私有数据对其他线程也是不可见的。
3.总结:
只要满足绑定到"local"或"Local"对象上的属性,在每个线程中都是隔离的,那么他就叫做`ThreadLocal`对象,也叫'ThreadLocal'变量。
4.代码演示:
from threading import Thread,local local =local() local.request = '具体用户的请求对象' class MyThread(Thread): def run(self): local.request = 'haha' print('子线程:',local.request) mythread = MyThread() mythread.start() mythread.join() print('主线程:',local.request) #############################################分隔线########################################### from werkzeug.local import Local local = Local() local.request = '具体用户的请求对象' class MyThread(Thread): def run(self): local.request = 'tantan' print('子线程:',local.request) mythread = MyThread() mythread.start() mythread.join() print('主线程:',local.request)