Car*_*n S 2 python python-multithreading python-2.7
如果d是字典,那么显然CPython不喜欢它,如果另一个线程修改d
d
[k for k in d]
被评估.如何使用
list(d)
代替?这是线程安全的吗?
小智 6
我完全使用@ user2357112,这是一个实现细节,你不应该依赖它.但是为了回答这个问题:相关list和dict方法是用C语言编写的,因此调用是一个单字节码操作,并且代码不会直接或间接地释放GIL,据我所知.因此在当前的CPython中没有其他Python线程可以中断list调用和修改d.
list
dict
请注意,如果其中任何一个list已被其他内容替换,或者d不是dictobject用C编写的实际的诚实上帝,则会发生故障.另请注意,"用C语写"并不是一个充分条件,例如许多集合操作调用比较/散列方法因此执行任意Python代码,允许释放GIL.
dictobject
归档时间:
11 年,4 月 前
查看次数:
141 次
最近记录: