深入浅出Flask(3) Flask多线程

本文探讨了Python多线程中的线程隔离问题,通过一个例子展示了无隔离时的问题。接着介绍了Flask如何利用`werkzeug`的Local实现线程隔离,以及LocalStack如何作为栈结构进一步封装Local,确保上下文的正确管理。同时,文章解释了current_app与request的关系,以及request和Request类的区别,帮助读者深入理解Flask的多线程机制。
摘要由CSDN通过智能技术生成

目录

Local线程隔离

LocalStack


 对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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值