Python中的互斥锁和join的应用
一丧“人生大部分的时候,都挺无聊的”
先说互斥锁的作用:lock互斥锁实现防止全局变量的互相争抢
做一个不太形象的比喻,你买了一个杯子(进程),你想喝混合口味的果汁,但是要自己做(线程),两种口味的果汁的接水口离得有点远,你不能一起接,所以你先接A后接B(互斥锁)(原谅我这个理科生粗陋的比喻)
不过可以说互斥锁是一个伪多线程。使用互斥锁我们就一定要认识一个新的方法Lock
Lock的使用实例
import threading
num =0
lock = threading.Lock()#导入互斥锁
def work1(number):lock.acquire()#上锁global numfor i in range(number):num+=1print(num)lock.release()#解锁
def work2(number):lock.acquire()#上锁global numfor i in range(number):num+=1print(num)lock.release()#解锁
if __name__ == '__main__':t1 = threading.Thread(target=work1,args=(2333,))#args传值一定为元组所以用(值,)t2 = threading.Thread(target=work2, args=(2333,))t1.start()t2.start()
这就完了吗?当然没有
试想如果你在一个接口接果汁,另一个被其他人占用,怎么办?
timeout
timeout顾名思义,就是一个定时器,当时间到达timeout定的值后,自动结束线程,将空间交给后来者。
我们来看实例吧
import threading
num =0
lock = threading.Lock()#导入互斥锁
def work1(number):lock.acquire(timeout=1)#上锁,无论如何1s后结束此线程global numfor i in range(number):num+=1print(num)lock.release()#解锁
def work2(number):lock.acquire(timeout=1)#上锁,无论如何1s后结束此线程global numfor i in range(number):num+=1print(num)lock.release()#解锁
if __name__ == '__main__':t1 = threading.Thread(target=work1,args=(2333,))#args传值一定为元组所以用(值,)t2 = threading.Thread(target=work2, args=(2333,))t1.start()t2.start()
除了锁还有别的方法可以避免这个问题吗?有,当然有
join方法
join方法就是当线程A结束后执行线程B(摔杯,那还谈什么多线程啊,你这个太明显了啊)
import threading
# 全局变量join lock timeout=
num = 0
# 任务一:
def work1(number):global numfor i in range(number):num += 1print('此时Num等于', num)
# 任务二:
def work2(number):global numfor i in range(number):num += 1print('此时Num等于', num)
if __name__ == '__main__':t1 = threading.Thread(target=work1, args=(10000000,))t2 = threading.Thread(target=work2, args=(10000000,))t1.start()t1.join()#当t1结束后执行t2t2.start()
Python中的互斥锁和join的应用相关推荐
- python中的互斥锁
如果没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期.这种现象称为"线程不安全". 线程同步解决问题: 系统调用t1,然后获取到num的值为0,此时上一 ...
- Python多任务(4.多线程--Python中的互斥锁和死锁)
互斥锁 1.互斥锁的概念 2.互斥锁的使用 3.使用互斥锁完成2个线程对同一全局变量各加100万次的操作,而不会出现问题 死锁 死锁的概念 避如何免死锁: 出现死锁的例子 互斥锁 1.互斥锁的概念 互 ...
- 学习笔记(20):Python网络编程并发编程-互斥锁与join的区别
立即学习:https://edu.csdn.net/course/play/24458/296432?utm_source=blogtoedu 互斥锁与join的异同: 1.同:都是将多进程并发模式变 ...
- 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型
一.守护进程 import random import time from multiprocessing import Processdef task():print('name: egon')ti ...
- c语言的锁和Python锁,Python中全局解释器锁、多线程和多进程
全局解释器锁(GIL)只允许1个Python线程控制Python解释器.这也就意味着同一时间点只能有1个Python线程运行.如果你的Python程序只有一个线程,那么全局解释器锁可能对你的影响不大, ...
- Python中的GIL锁
Python中的GIL锁 在Python中,可以通过多进程.多线程和多协程来实现多任务. 在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行. 但是,其实Pyth ...
- 彻底弄懂Python中的GIL锁
彻底弄懂Python中的GIL锁 转载:https://blog.csdn.net/yushuaigee/article/details/86537474 刚学习python时,我关注了许多介绍pyt ...
- python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题
浅谈python中拼接路径os.path.join斜杠的问题 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠 directory1='/opt/apps/upgradePac ...
- python中gil锁和线程锁_浅谈Python中的全局锁(GIL)问题
CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态.比如复杂的 ...
最新文章
- HP-UX crontab: you are not authorized to use cron
- 手撕Nspack3.7(北斗)壳
- 照片处理软件(iSee图片专家) 3.930 中文免费版
- cocoaPod安装过程
- CentOS 7 安装记录
- python的符号函数得到的数字类型_Python笔记——数字类型的几个函数
- 朱兴杰(1986-),男,泰康保险集团股份有限公司数据信息中心应用创新高级工程师...
- 关于链表中经常用到的二级指针
- linux 进程 转存储,Linux memory management——(进程虚存空间的管理)(转)
- 10款翻译引擎全面对比,别再无脑吹DeepL了,根本不好用!
- Win7如何解决精简版的迅雷7无法运行
- 怎么打开微信的定位服务器地址,打开微信附近的人经常看到无法确定你的位置信息是怎么回事...
- 人脸识别活体检测技术探讨
- 什么是分布式系统,这么讲不信你不会
- wxml 点击图片下载_小程序图表插件
- 华为交换机Hybrid接口
- node之request模块
- windows10 android模拟器,手机windows10模拟器安卓版
- R语言作图展示数据集中各样品的TMB,immunescore等
- 电阻系列知识(9)-0欧姆电阻的作用