我正在学习Python语言。我对线程没有很好的理解,我想不出你需要 threading.Lock() 的情况,因为 CPython 的 GIL 只允许一次执行一个线程,所以我认为关键部分不能被访问同时两个线程。
最佳答案
GIL 保证在任何时间执行一个进程。 但是,当使用线程时,您可能会在线程之间共享文件或其他对象。即使任何时刻只有一个线程处于事件状态(由于 GIL),多个线程也可能可以访问同一个对象,此时锁就发挥作用了。使用 threading.Lock() 可以避免给定对象在第一个线程已经使用它时被第二个线程访问。
假设您有一个文件,并且两个线程想要写入同一个文件。 GIL 保证在给定时刻只执行一个 WRITE 操作,Lock 将保证只有单个线程可以写入该文件。
关于python - 当Python有GIL时,还需要threading.Lock()吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49859287/