python之死锁
Python 死锁
2023-09-11 14:15:15 时间
python之死锁
1. 死锁的概念
死锁: 一直等待对方释放锁的情景就是死锁
为了更好的理解死锁,来看一个现实生活的效果图:
说明:
现实社会中,男女双方一直等待对方先道歉的这种行为就好比是死锁。
死锁的结果
- 会造成应用程序的停止响应,不能再处理其它任务了。
2. 死锁示例
需求:
根据下标在列表中取值, 保证同一时刻只能有一个线程去取值
import threading
import time
# 创建互斥锁
lock = threading.Lock()
# 根据下标去取值, 保证同一时刻只能有一个线程去取值
def get_value(index):
# 上锁
lock.acquire()
print(threading.current_thread())
my_list = [3,6,8,1]
# 判断下标释放越界
if index >= len(my_list):
print("下标越界:", index)
return
value = my_list[index]
print(value)
time.sleep(0.2)
# 释放锁
lock.release()
if __name__ == '__main__':
# 模拟大量线程去执行取值操作
for i in range(30):
sub_thread = threading.Thread(target=get_value, args=(i,))
sub_thread.start()
3. 避免死锁
- 在合适的地方释放锁
import threading
import time
# 创建互斥锁
lock = threading.Lock()
# 根据下标去取值, 保证同一时刻只能有一个线程去取值
def get_value(index):
# 上锁
lock.acquire()
print(threading.current_thread())
my_list = [3,6,8,1]
if index >= len(my_list):
print("下标越界:", index)
# 当下标越界需要释放锁,让后面的线程还可以取值
lock.release()
return
value = my_list[index]
print(value)
time.sleep(0.2)
# 释放锁
lock.release()
if __name__ == '__main__':
# 模拟大量线程去执行取值操作
for i in range(30):
sub_thread = threading.Thread(target=get_value, args=(i,))
sub_thread.start()
4. 小结
- 使用互斥锁的时候需要注意死锁的问题,要在合适的地方注意释放锁。
- 死锁一旦产生就会造成应用程序的停止响应,应用程序无法再继续往下执行了。
相关文章
- Python脚本写端口扫描器(socket,python-nmap)
- How to run python interactive in current file's directory in Visual Studio Code? Python路径问题
- python魔法方法之-Python __repr__()方法:显示属性
- python是否存在某个字符串 效率最高_Python中判断子串存在的性能比较及分析总结...
- Python 卸载python
- Python 协程gevent使用
- 超全Python学习路线图+14张思维导图,让python初学者不走弯路
- 2023版python安装教程奉上,Python永久使用 超详细版,一看就会【小白友好】
- python强大之处在哪里?为什么那么多人喜欢Python?
- Python库Numpy中的数据类型与OpenCV中数据类型的对应关系以及改写相关代码时需注意的地方
- 143 python网络编程 - UDP发送、接收数据
- Python自动化测试面试题-编程篇
- 源码编译vi过程中进行配置时报“checking if compile and link flags for Python are sane... no: PYTHON DISABLED”怎么办?
- 《Python核心编程(第3版)》——1.5 更长的正则表达式示例
- python学习之基于Python的人脸识别技术学习
- python学习之OpenCV-Python模块的部分应用示例(生成素描图和动漫图)
- 基于Python(Django)+MySQL 实现(Web)SQL智能检测系统的设计与实现【100010694】
- Python-Flask实现基金自选网站
- 使用 Python 从作为字符串给出的数字中删除前导零
- 【转载】python的魔法方法———A Guide to Python's Magic Methods
- 分享 10 个高频 Python 面试题
- VSCode Python 开发环境配置
- python之使用smtplib模块发送邮件
- 【Python基础】我的第一个 python 程序
- python xlwings操作excel调试代码
- Python 基础 之 Ubuntu 上安装 python 和 python-pip
- [Python]B站学习笔记--- 字符串
- [Python]2分钟完成python + Selenium Web端自动化环境搭建,开启~~~
- Python opencv-python 简单测试