python - 当Python有GIL时,还需要threading.Lock()吗?

标签 python multithreading python-multithreading cpython gil

我正在学习Python语言。我对线程没有很好的理解,我想不出你需要 threading.Lock() 的情况,因为 CPython 的 GIL 只允许一次执行一个线程,所以我认为关键部分不能被访问同时两个线程。

最佳答案

GIL 保证在任何时间执行一个进程。 但是,当使用线程时,您可能会在线程之间共享文件或其他对象。即使任何时刻只有一个线程处于事件状态(由于 GIL),多个线程也可能可以访问同一个对象,此时锁就发挥作用了。使用 threading.Lock() 可以避免给定对象在第一个线程已经使用它时被第二个线程访问。

假设您有一个文件,并且两个线程想要写入同一个文件。 GIL 保证在给定时刻只执行一个 WRITE 操作,Lock 将保证只有单个线程可以写入该文件。

关于python - 当Python有GIL时,还需要threading.Lock()吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49859287/

相关文章:

python - 如何批量处理 get 请求中的 URL 列表?

python - 同时按行和列降序对 Dataframe 进行排序

c# - 使用 backgroundworker 进行时间控制

c++ - 信号唤醒线程

c# - 为操作设置超时

Python获取与os/proc/[pid]/匹配的TID

multithreading - TensorFlow/Keras 多线程模型拟合

python - 在pygame上的内存益智游戏中,我可以保持原来的显示速度较慢,然后在玩游戏时加快速度吗?

python - 如何修复 "element not interactable"异常?

python - 使用 skimage 导入过滤器时出现问题