一丧“人生大部分的时候,都挺无聊的”

先说互斥锁的作用: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的应用相关推荐

  1. python中的互斥锁

    如果没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期.这种现象称为"线程不安全". 线程同步解决问题: 系统调用t1,然后获取到num的值为0,此时上一 ...

  2. Python多任务(4.多线程--Python中的互斥锁和死锁)

    互斥锁 1.互斥锁的概念 2.互斥锁的使用 3.使用互斥锁完成2个线程对同一全局变量各加100万次的操作,而不会出现问题 死锁 死锁的概念 避如何免死锁: 出现死锁的例子 互斥锁 1.互斥锁的概念 互 ...

  3. 学习笔记(20):Python网络编程并发编程-互斥锁与join的区别

    立即学习:https://edu.csdn.net/course/play/24458/296432?utm_source=blogtoedu 互斥锁与join的异同: 1.同:都是将多进程并发模式变 ...

  4. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型

    一.守护进程 import random import time from multiprocessing import Processdef task():print('name: egon')ti ...

  5. c语言的锁和Python锁,Python中全局解释器锁、多线程和多进程

    全局解释器锁(GIL)只允许1个Python线程控制Python解释器.这也就意味着同一时间点只能有1个Python线程运行.如果你的Python程序只有一个线程,那么全局解释器锁可能对你的影响不大, ...

  6. Python中的GIL锁

    Python中的GIL锁 在Python中,可以通过多进程.多线程和多协程来实现多任务. 在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行. 但是,其实Pyth ...

  7. 彻底弄懂Python中的GIL锁

    彻底弄懂Python中的GIL锁 转载:https://blog.csdn.net/yushuaigee/article/details/86537474 刚学习python时,我关注了许多介绍pyt ...

  8. python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题

    浅谈python中拼接路径os.path.join斜杠的问题 调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠 directory1='/opt/apps/upgradePac ...

  9. python中gil锁和线程锁_浅谈Python中的全局锁(GIL)问题

    CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态.比如复杂的 ...

最新文章

  1. HP-UX crontab: you are not authorized to use cron
  2. 手撕Nspack3.7(北斗)壳
  3. 照片处理软件(iSee图片专家) 3.930 中文免费版
  4. cocoaPod安装过程
  5. CentOS 7 安装记录
  6. python的符号函数得到的数字类型_Python笔记——数字类型的几个函数
  7. 朱兴杰(1986-),男,泰康保险集团股份有限公司数据信息中心应用创新高级工程师...
  8. 关于链表中经常用到的二级指针
  9. linux 进程 转存储,Linux memory management——(进程虚存空间的管理)(转)
  10. 10款翻译引擎全面对比,别再无脑吹DeepL了,根本不好用!
  11. Win7如何解决精简版的迅雷7无法运行
  12. 怎么打开微信的定位服务器地址,打开微信附近的人经常看到无法确定你的位置信息是怎么回事...
  13. 人脸识别活体检测技术探讨
  14. 什么是分布式系统,这么讲不信你不会
  15. wxml 点击图片下载_小程序图表插件
  16. 华为交换机Hybrid接口
  17. node之request模块
  18. windows10 android模拟器,手机windows10模拟器安卓版
  19. R语言作图展示数据集中各样品的TMB,immunescore等
  20. 电阻系列知识(9)-0欧姆电阻的作用

热门文章

  1. 一文读懂区块链以及一个区块链的实现
  2. iOS自定义组与组之间的距离以及视图
  3. Nginx站点缓存设置
  4. Linux下启动启动tomcat 服务器报错 The file is absent or does not have execute permission
  5. Python 实现网络爬虫小程序
  6. SQL2005 学记笔记(9)
  7. WCF分布式安全开发实践(6):传输安全模式之自定义X509Certificate证书验证
  8. 哪里是我们最好的避风港?
  9. NodeJS同步MySQL上游数据到ElasticSearch数据库中
  10. Linux 查看网段内所有IP