对不起,有一个问题,大家都知道Python有GIL,所以在任何一个时间点只有一个线程在旋转。
这就是说,那么为什么我们在访问/修改集合时需要锁?例如,从列表中添加或弹出元素。或者更新字典?像list.sort()这样的操作也是原子的。我猜答案是:你确定你正在执行的任何操作都是“原子”的吗?如果不是,它可以被抢占(抢占式多任务)
因此,一般来说,由于您不确定底层是如何实现的,所以更安全的方法是锁定。
先谢了。
对不起,有一个问题,大家都知道Python有GIL,所以在任何一个时间点只有一个线程在旋转。
这就是说,那么为什么我们在访问/修改集合时需要锁?例如,从列表中添加或弹出元素。或者更新字典?像list.sort()这样的操作也是原子的。我猜答案是:你确定你正在执行的任何操作都是“原子”的吗?如果不是,它可以被抢占(抢占式多任务)
因此,一般来说,由于您不确定底层是如何实现的,所以更安全的方法是锁定。
先谢了。
1条答案
按热度按时间1tuwyuhd1#
如果你正在为自己编写代码,并且你100%确定在可预见的将来你会坚持使用CPython来执行代码,那么是的,你确实可以单独依靠GIL来保持基本集合类型的大多数操作线程安全。
但是CPython并不是唯一的Python实现,Python语言本身并不保证任何集合操作都是原子的,所以如果你正在编写多线程代码供公众使用,那么在对集合进行更改时使用锁会更安全,并且不要对GIL的存在或任何特定操作的存在做出任何假设。