Python Threading 线程/互斥锁/死锁/GIL锁


Posted in Python onJuly 21, 2019

导入线程包

import threading

准备函数线程,传参数

t1 = threading.Thread(target=func,args=(args,))

类继承线程,创建线程对象

class MyThread(threading.Thread)
  def run(self):
    pass
if __name__ == "__main__":
  t = MyThread()
  t.start()

线程共享全面变量,但在共享全局变量时会出现数据错误问题

使用 threading 模块中的 Lock 类,添加互斥锁可以解决线程共享全局变量问题

# 创建锁
mutex = threading.Lock()
# 锁定
mutex.acquire()
# 释放锁
mutex.release()

互斥锁可能导致死锁问题

在线程间共享多个资源的时候,如果两个线程分别占有一部分资源,并且同时在等待对方的资源时,就会造成死锁.

解决方案:

1.银行家算法:程序设计时想好锁定与释放的时空关系
2.添加超时等待

Python 中 多线程的 GIL 全局解释器锁

GIL是C语言版本python解释器的遗留问题
GIL锁使得python中同一时刻其实只有一个线程在运行
但是多线程毕竟还是闭单线程快,这是因为在一个线程IO阻塞的时间段,其他线程可以运行
GIL 锁和互斥锁是不一样的,GIL锁是锁线程的,互斥锁是锁线程?仁挛竦?互斥锁是开发者自己写的,GIL锁来源与C版本python解释器

解决GIL的方法

1.使用java版的python解释器
2.使用其他语言代码,完成该部分

总结

以上所述是小编给大家介绍的Python Threading 线程/互斥锁/死锁/GIL锁,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
Python挑选文件夹里宽大于300图片的方法
Mar 05 Python
Python中DJANGO简单测试实例
May 11 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
一个基于flask的web应用诞生 组织结构调整(7)
Apr 11 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
python绘图模块matplotlib示例详解
Jul 26 Python
Pytorch中accuracy和loss的计算知识点总结
Sep 10 Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
Python time库基本使用方法分析
Dec 13 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
详解Django模版中加载静态文件配置方法
Jul 21 #Python
django数据库自动重连的方法实例
Jul 21 #Python
django使用django-apscheduler 实现定时任务的例子
Jul 20 #Python
python 自定义装饰器实例详解
Jul 20 #Python
Python 列表去重去除空字符的例子
Jul 20 #Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 #Python
用Python配平化学方程式的方法
Jul 20 #Python
You might like
一个PHP数组应该有多大的分析
2009/07/30 PHP
php 日期时间处理函数小结
2009/12/18 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
php之可变变量的实例详解
2017/09/12 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
使用JQuery进行跨域请求
2010/01/25 Javascript
JavaScript 对象链式操作测试代码
2010/04/25 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
解析img图片没找到onerror事件 Stack overflow at line: 0
2013/12/23 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
深入理解Node module模块
2018/03/26 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
koa源码中promise的解读
2018/11/13 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
python实现通过shelve修改对象实例
2014/09/26 Python
在Python中操作时间之strptime()方法的使用
2020/12/30 Python
Python绘制七段数码管实例代码
2017/12/20 Python
python中eval与int的区别浅析
2019/08/11 Python
wxPython实现整点报时
2019/11/18 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
python空元组在all中返回结果详解
2020/12/15 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
德国奢侈品网上商城:Mytheresa
2016/08/24 全球购物
公司年会晚宴演讲稿
2014/01/06 职场文书
项目建议书格式
2014/03/12 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android