如何解决Python thread_local数据
使用threading.local()
的Python threading模块文档recommends
用于存储线程之间不共享的数据。
使用时是否有任何基本问题
threading.current_thread().x= 42
代替
mydata= threading.local()
mydata.x= 42
?
前者会稍微污染线程对象的命名空间,但是可以根据需要进行处理。除此之外,这两种方法似乎都可行,但是必须在文档中推荐使用后者是有原因的。
解决方法
threading.local()
对象可以从任何地方访问,但是根据访问该对象的线程,它将返回不同的数据。
示例:
mydata= threading.local()
mydata.x= 42
def foo():
mydata.x = 'Hello from thread'
print(mydata.x)
thread1 = threading.Thread(target=foo)
thread1.start()
thread1.join()
>>> 'Hello from thread'
print(mydata.x)
>>> 42
使用threading.current_thread().x
不能实现这种行为。
更新
更清晰的例子:
import threading
from threading import current_thread
threadLocal = threading.local()
def hello():
initialized = getattr(threadLocal,'initialized',None)
if initialized is None:
print('Nice to meet you',current_thread().name)
threadLocal.initialized = True
else:
print('Welcome back',current_thread().name)
hello()
hello()
# output
'Nice to meet you MainThread'
'Welcome back MainThread'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。