锁是什么?什么场合使用锁?

锁是一种机制,用于保护那些会引起冲突的资源。

比如上厕所,进去之后第一件事干嘛?把厕所门反锁!表示什么呢?表示这个厕所正在使用中!

至于在厕所里面干大事、干小事、还是打飞机,都可以!

完事之后干嘛?把厕所门打开!表示什么呢?那谁,你可以进来打飞机了。

一、全局锁、函数内部上锁/解锁、函数打包进线程

import threading
import timedef my_func(num):global counter, mutex# 获得线程名threadname = threading.currentThread().getName()for i in range(num):mutex.acquire()         # 锁住①counter = counter + 1   # 保护②  如同厕所坑位是抢占性资源,同一时间只能一个人去蹲mutex.release()         # 解锁③print(threadname, i, counter)  # 再回去,坑位counter可能已被其它人蹲过time.sleep(1)if __name__ == '__main__':counter = 0 # 计数器
    mutex = threading.Lock() # 创建锁
    threads = []for i in range(4):threads.append(threading.Thread(target=my_func, args=(10,))) # 创建线程for t in threads:t.setDaemon(True)       # 守护t.start()               # 启动线程for t in threads:t.join()                # 阻塞主程,直到线程退出

运行效果图:

可以发现到 counter 并不是顺序显示的,看官可以思考其原因。

二、全局锁、线程类、线程类run方法中上锁/解锁

import threading
import timeclass Worker(threading.Thread):'''线程类'''def __init__(self, num=5):super().__init__()self.num = numdef run(self):global counter, mutexthreadname = threading.currentThread().getName()for i in range(self.num):mutex.acquire()         # 锁住①counter = counter + 1   # 保护② 如同厕所坑位是抢占性资源,同一时间只能一个人去蹲mutex.release()         # 解锁③print(threadname, i, counter)  # 此时,counter可能又已被其它线程改变time.sleep(1)if __name__ == '__main__':# 全局计数器counter = 1# 创建锁mutex = threading.Lock()# 创建线程对象threads = []for i in range(4):threads.append(Worker(10)) # 添加 4 个 Worker# 启动线程for t in threads:t.start()# 阻塞主程for t in threads:t.join()

python 多线程笔记(2)-- 锁相关推荐

  1. php和python的多线程,Python多线程以及线程锁简单理解(代码)

    本篇文章给大家带来的内容是关于Python多线程以及线程锁简单理解(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 多线程threading 模块创建线程创建自己的线程类线程通 ...

  2. 关于python多线程,线程锁,线程池开发接口测试脚本真实实例,用于测试时间节约

    场景:现在测试场景为,某个抢购场景,抢购时间只有10秒,测试人员需要5个拥有优惠券的账号,然后5个账号为业务关联的账号同时去抢购 过程:每个账号涉及调用一次购买接口,涉及一次SQL查询 首先我们先定义 ...

  3. python多线程之线程锁(Lock)和递归锁(RLock)实例

    一.线程锁 Threading模块为我们提供了一个类,Threading.Lock锁.我们创建一个该类对象,在线程函数执行前,"抢占"该锁,执行完成后,"释放" ...

  4. python多线程_thread使用锁

    [锁]分为[创建锁][获取锁][释放锁] 1.allocate_lock函数 [创建锁对象] 2.acquire方法[获取锁], 3.release方法[释放锁] 完成[锁]这三个功能需要_threa ...

  5. python 多线程笔记(6)-- 闭包

    在类里弄一个闭包出来 很多资料上说,类内部的变量有两种. 按定义所在的位置,分__init__上方的和__init__下方的 按内存所在的位置,分类的和实例的,或者说公共的和私有的 现在,我想在类里定 ...

  6. Python多线程笔记——简单函数版和类实现版

    简单函数版 import threadingdef func():while True:bodydef main():A = threading.Thread(target=func)A.daemon ...

  7. python多线程加锁异步处理装饰器

    2019独角兽企业重金招聘Python工程师标准>>> 前言: 虽谈python多线程带有全局锁PIL,似乎对性能提升没什么意义,一般考虑多进程或者协程,但PIL没有被去掉还是应该有 ...

  8. python多线程知识点(只能说是知道有多线程一个词而已,摸摸头顶,还有毛)

    把关于多线程记录一下 1.线程和进程 https://blog.csdn.net/weixin_47021806/article/details/115471835 2.使用单/多线程执行程序展示 h ...

  9. Python 多线程+多进程简单使用教程,如何在多进程开多线程

    一.Python多进程多线程 关于python多进程多线程的相关基础知识,在我之前的博客有写过,并且就关于python多线程的GIL锁问题,也在我的一篇博客中有相关的解释. 为什么python多线程在 ...

最新文章

  1. CVPR 2021接收结果出炉!录用1663篇,接受率显著提升,你的论文中了吗?(附论文下载)...
  2. golang红包算法
  3. React.js 开发常见问题
  4. PHP开发erp账号登陆问题,浪潮ERP软件E系列创建账套时提示“由于登陆不正确、请重新登陆” | 浪潮888博客...
  5. 看故事学知识,这篇Java代理的文章妙啊!
  6. Java 蓝桥杯 字符串基本用法
  7. android115 自定义控件
  8. 整理struct sockaddr和struct sockaddr_in
  9. zabbix(三)—— update
  10. servlet中session的使用
  11. Linux固态硬盘 设置写入缓存,固态硬盘做缓存如何设置
  12. HBuilder 开发工具
  13. grub4dos linux live,grub4dos启动菜单示例
  14. 【渝粤教育】广东开放大学 中国文化与中国文学 形成性考核 (46)
  15. Windows无法安装到GPT格式磁盘的根本解决办法 - 初学者系列 - 学习者系列文章...
  16. Python OpenCV 3.x 示例:6~11
  17. [5-23]绿色精品软件每天更新[uc23整理]
  18. 计算机考研考心理学,2019考研:心理学专业解读及就业前景_计算机考研
  19. How to Write a Spelling Corrector
  20. VRP系统(视图介绍以及基本命令)

热门文章

  1. 亚马逊的PuTTY连接AWS出现network error connection refused,终极解决方案。
  2. mysql自动断开该连接解决方案
  3. MySql安装错误代码1045的解决方案
  4. Java 异常Exception e中e的getMessage()和toString()以及 e.printStackTrace();方法的区别
  5. tomcat端口被占用问题完美解决方案!
  6. 异常:Error resolving template “xxx“, template might not exist or might not be accessible...解决办法
  7. mybatis项目报错:java.sql.SQLException: ORA-00911: 无效字符 解决方法
  8. 获取ASP.NET MVC中的完整操作URL [重复]
  9. 在React.js中执行反跳
  10. 枚举的字符串表示形式