老师你好,关于LocalStack这一小节我有一个疑问。

来源:6-12 LocalStack作为线程隔离对象的意义

danzzzz

2018-12-08

就是您在视频里说,主线程跟新创建的线程各有一个LocalStack。
但是我想的是,在LocalStack的源代码中,有这样一段代码:

在这里输入代码
    def __init__(self):
        self._local = Local()
        
    def push(self, obj):
        """Pushes a new item to the stack"""
        rv = getattr(self._local, 'stack', None)
        if rv is None:
            self._local.stack = rv = []
        rv.append(obj)
        return rv

我看到push方法里面的第一行代码,我认为的是,每一次push,都会检查self._local中是否有这个元素,在检查的过程中,由于两个线程一个是主线程一个是新创建的线程,而线程隔离对象实际上只有一个,也就是self._local,它本身就是隔离对象。因此我想的是,您说的两个LocalStack是否只是一个简单理解的说法,而实际上LocalStack的隔离特性是由于封装了Local才得以实现的。

写回答

1回答

小风铃儿

2018-12-17

我个人理解,从源码结合7月老师讲得内容。LocalStack栈每一次push都会检查self._local中是否有这个元素,7月老师也说了LocalStack的隔离特性是由于封装了Local才得以实现的。

0
0

Python Flask高级编程之从0到1开发《鱼书》精品项目

7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程

2735 学习 · 1267 问题

查看课程