目录
对python稍有了解的同学可能了解,Python多线程对于处理IO密集型任务具有还算客观的效益,在探究Flask多线程之前,我们首先认识一下线程隔离。
Local线程隔离
一个简单的例子让我们看看没有线程隔离的任务会发生怎么样的后果:
import threading
import time
class A:
b = 1
my_ob = A()
def woker():
my_ob.b = 2
print('new: ', my_ob.b)
new = threading.Thread(target=woker, name='new')
new.start()
time.sleep(1)
print('main: ', my_ob.b)
PS:类下面空两行不是我想要的,而是PEP8要求的呀!没错我开始使用PyCharm了,说实话除了启动慢了点,还是比VS Code要好的。
上述是一个简单的双线程的例子,同时引入了"sleep"来保证新线程先于主线程得到结果,可以看到,在没有线程隔离的程序中,最终"my_ob.b"都会等于2,这是因为新线程给b做了新的赋值。影响到了两个线程中的b。
Flask基于字典的实现提供了一种线程隔离的方法,准确的说是"werkzeug"提供的Local函数。
import threading
import time
from werkzeug.local import Local
my_ob = L