gpt4 book ai didi

Python:从 `threading.local` 中获取所有项目

转载 作者:太空狗 更新时间:2023-10-29 21:52:46 27 4
gpt4 key购买 nike

我有一个 threading.local 对象。调试时,我想获取它包含的所有线程的所有对象,而我只在其中一个线程上。我怎样才能做到这一点?

最佳答案

如果您使用的是 threading.local 的纯 Python 版本(from _threading_local import local),这是可能的:

for t in threading.enumerate():
for item in t.__dict__:
if isinstance(item, tuple): # Each thread's `local` state is kept in a tuple stored in its __dict__
print("Thread's local is %s" % t.__dict__[item])

这是一个实际的例子:

from _threading_local import local
import threading
import time

l = local()

def f():
global l
l.ok = "HMM"
time.sleep(50)

if __name__ == "__main__":
l.ok = 'hi'
t = threading.Thread(target=f)
t.start()
for t in threading.enumerate():
for item in t.__dict__:
if isinstance(item, tuple):
print("Thread's local is %s" % t.__dict__[item])

输出:

Thread's local is {'ok': 'hi'}
Thread's local is {'ok': 'HMM'}

这是利用了这样一个事实,即 local 的纯 python 实现将每个线程的 local 状态存储在 Thread 对象的 __dict__ 中,使用元组对象作为键:

>>> threading.current_thread().__dict__
{ ..., ('_local__key', 'thread.local.140466266257288'): {'ok': 'hi'}, ...}

如果您正在使用用 C 编写的 local 的实现(如果您只是使用 from threading import local 通常就是这种情况), 我不确定你如何/是否可以做到这一点。

关于Python:从 `threading.local` 中获取所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25435908/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com