gpt4 book ai didi

python - 线程安全的python字典?

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:03 25 4
gpt4 key购买 nike

我有一个启动 10 个线程的函数调用。在开始这些线程之前,我有

from collections import defaultdict
output = defaultdict(dict)

输出为空。

每个线程都会产生数据写入字典。

类似于:

output['water'] = 'h20'
output['fire'] = 'delta of oxygen'
....

线程只会添加项目,它们不会迭代任何其他项目或修改任何其他项目。 output['water'] 是不同于 output['fire'] 的项目。我还可以保证没有两个线程会创建相同的项目。也就是说,每个线程 T 都有一个唯一的 i。在代码中:output[i] 每个线程都是唯一的。

在这方面,这个字典线程安全吗?

最佳答案

是的。

如果您使用 CPython 和字符串作为键,那么可以。 CPython 中的 GIL 确保一次只有一个线程执行字节码,并且将键设置为字典中的值发生在单个操作码 STORE_SUBSCR 中。如果您没有使用 CPython,或者您使用的是具有自定义 __hash____eq____cmp__ 方法的 key ,则一切皆有可能。如果我有一个肥皂盒,我会跳上它并警告您依赖这样的实现细节来确保正确性的弊端。编写仅适用于将要使用它的情况和环境的东西对您来说更像 pythonic,因为否则可能会被视为过早的优化。享受您的工作代码吧!

>>> from dis import dis
>>> dis(compile('output = defaultdict(dict); output["water"] = "H2O"', 'example', 'exec'))
1 0 LOAD_NAME 0 (defaultdict)
3 LOAD_NAME 1 (dict)
6 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
9 STORE_NAME 2 (output)
12 LOAD_CONST 0 ('H2O')
15 LOAD_NAME 2 (output)
18 LOAD_CONST 1 ('water')
21 STORE_SUBSCR
22 LOAD_CONST 2 (None)
25 RETURN_VALUE

这是discussed elsewhere .

关于python - 线程安全的python字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17866250/

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