gpt4 book ai didi

python - python 的 "in"语言构造对于列表是线程安全的吗?

转载 作者:太空狗 更新时间:2023-10-29 20:43:54 26 4
gpt4 key购买 nike

obj in a_list 是否线程安全,而 a_list 可能在不同的线程中被修改?

Here's a comprehensive yet non-exhaustive list of examples list 操作以及它们是否是线程安全的,但是我找不到关于 in 语言构造的任何引用。

在 python 实现方面,我使用 CPython,但其他实现的答案对社区也有帮助。

最佳答案

我假设您在这里使用的是 CPython。

假设没有自定义 __contains____iter__ Hook 返回 Python 您测试的值包含在 列表使用在 Python 代码中实现的自定义 __eq__ Hook ,in 运算符可以完全在 C 中处理,并且只是 一个 操作码。

这使得操作完全线程安全; Python 线程只在 操作码之间切换; GIL(全局解释器锁)通常只在操作码之间解锁。

也就是说,如果您在自定义 C 类型上使用 in,在测试包含时解锁 GIL 将不是线程安全的。

换句话说:in字节码测试被锁定,但是如果算子需要调用Python代码(通过__contains__,用__iter__迭代) > 当没有可用的 __contains__ 实现时,或者值是针对在 Python 中实现的 __eq__ Hook 进行测试时,则该操作不是线程安全的。

对于其他 Python 实现,线程的处理方式可能有很大差异。当然,Jython 和 IronPython 没有 GIL,您应该假设该操作不是线程安全的。

关于python - python 的 "in"语言构造对于列表是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19727759/

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