python的“in”语言构造对于列表来说是线程安全的吗?

2023-11-24

Is obj in a_list线程安全的同时a_list可能会在不同的线程中修改?

这是一个全面但非详尽的示例列表 of list操作以及它们是否是线程安全的,但是我找不到任何参考in语言构造。

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


我假设您在这里使用 CPython。

只要没有定制__contains__ or __iter__钩子落回Pythonor您测试的值包含in该列表使用自定义__eq__用 Python 代码实现的钩子,in运算符可以完全用 C 处理,并且只是one opcode.

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python的“in”语言构造对于列表来说是线程安全的吗? 的相关文章

随机推荐