擅长:python、mysql、java
<p>以线程安全的方式计算“嵌套”的数量是使用<em><a href="http://docs.python.org/library/threading.html?highlight=threading.local#threading.local" rel="nofollow noreferrer">thread-local storage</a></em>的一个很好的例子:</p>
<pre><code>import threading
mydata = threading.local()
mydata.nesting = 0
class auto_refresh(object):
def __init__(self, f):
self.f = f
def __call__(self, *args, **kwargs):
mydata.nesting += 1
try: return self.f(*args, **kwargs)
finally:
mydata.nesting -= 1
if mydata.nesting == 0:
print 'refreshing'
</code></pre>
<p>如果您不关心线程,只要您的Python安装是在启用线程的情况下编译的(而现在几乎所有这些都启用了),这仍然可以正常工作。如果您担心没有线程的特殊Python安装,请将<code>import</code>语句改为</p>
^{pr2}$
<p>大致如<a href="http://docs.python.org/library/dummy_threading.html#module-dummy_threading" rel="nofollow noreferrer">the docs</a>中建议的那样(除了文档对导入结果使用了一个特殊的“private”名称,而且没有真正的原因,所以我使用了一个简单的名称;-)。在</p>