老师你好,关于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才得以实现的。
00
相似问题