Python的`list(some_dictionary)`是线程安全的吗?

时间:2014-07-14 10:04:36

标签: python python-2.7 python-multithreading

如果d是一个字典,那么显然CPython不喜欢它,如果另一个线程修改d而

[k for k in d]
评估

。怎么样使用

list(d)

代替?这是线程安全的吗?

1 个答案:

答案 0 :(得分:6)

我完全使用@ user2357112,这是一个实现细节,你不应该依赖它。但是为了回答这个问题:相关的listdict方法是用C语言编写的,因此调用是单字节码操作,the code不直接释放GIL或据我所知,间接地说。因此,当前CPython中的 没有其他Python线程可以中断list调用并修改d

请注意,如果list已替换为其他内容,或d不是用C编写的实际诚实dictobject,则会出现此问题。另请注意“用C语言编写“不是一个充分条件,例如许多集合操作调用比较/散列方法,因此执行任意Python代码,允许释放GIL。