参考链接: 【莫烦Python】Threading 学会多线程 Python
参考链接: 莫烦 多线程
参考链接: threading — 基于线程的并行
参考链接: queue — 一个同步的队列类
参考链接: 12.9 Python的全局锁问题
参考链接: 锁对象

lock在不同线程使用同一共享内存时,能够确保线程之间互不影响,
使用lock的方法是, 在每个线程执行运算修改共享内存之前,
执行lock.acquire()将共享内存上锁, 确保当前线程执行时,
内存不会被其他线程访问,执行运算完毕后,
使用lock.release()将锁打开,
保证其他的线程可以使用该共享内存。

testThreading6_1.py

# 教学视频第6集
import threading
def job1():global Afor i in range(10):A += 1print('job1', A)def job2():global Afor i in range(10):A += 100000print('job2', A)if __name__ == '__main__':A = 0t1 = threading.Thread(target=job1)t2 = threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()print('END:',A)

控制台结果输出:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。尝试新的跨平台 PowerShell https://aka.ms/pscore6加载个人及系统配置文件用了 863 毫秒。
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\测试多线程>  & 'D:\Python\Python37\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2021.1.502429796\pythonFiles\lib\python\debugpy\launcher' '60094' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\测试多线程\testThreading6_1.py'
job1 1job2job1100001
100002
job2job1  200003
200002job1 200004job1job2  200005300005job1job2  300006400006job1job2  400007500007job1job2  500008600008job1job2  600009700009job1job2  700010800010job2 900010
job2 1000010
END: 1000010
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\测试多线程>

testThreading6_2.py

# 教学视频第6集
import threading
def job1():global A, locklock.acquire()for i in range(10):A += 1print('job1', A)lock.release()def job2():global A, locklock.acquire()for i in range(10):A += 100000print('job2', A)lock.release()if __name__ == '__main__':lock = threading.Lock()A = 0t1 = threading.Thread(target=job1)t2 = threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()print('END:',A)

控制台结果输出:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。尝试新的跨平台 PowerShell https://aka.ms/pscore6加载个人及系统配置文件用了 836 毫秒。
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\测试多线程>  & 'D:\Python\Python37\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2021.1.502429796\pythonFiles\lib\python\debugpy\launcher' '60103' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\测试多线程\testThreading6_2.py'
job1 1
job1 2
job1 3
job1 4
job1 5
job1 6
job1 7
job1 8
job1 9
job1 10
job2 100010
job2 200010
job2 300010
job2 400010
job2 500010
job2 600010
job2 700010
job2 800010
job2 900010
job2 1000010
END: 1000010
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\测试多线程>

testThreading6_3.py

# 教学视频第6集
import threading
import time
def job1():global A, lockfor i in range(10):# time.sleep(0.1)lock.acquire()A += 1print('job1', A)lock.release()def job2():global A, lockfor i in range(10):# time.sleep(0.1)lock.acquire()A += 100000print('job2', A)lock.release()if __name__ == '__main__':lock = threading.Lock()A = 0t1 = threading.Thread(target=job1)t2 = threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()print('END:',A)

控制台结果输出:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。尝试新的跨平台 PowerShell https://aka.ms/pscore6加载个人及系统配置文件用了 874 毫秒。
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\测试多线程>  & 'D:\Python\Python37\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2021.1.502429796\pythonFiles\lib\python\debugpy\launcher' '60112' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\测试多线程\testThreading6_3.py'
job1 1
job1 2
job1 3
job1 4
job1 5
job1 6
job1 7
job1 8
job1 9
job1 10
job2 100010
job2 200010
job2 300010
job2 400010
job2 500010
job2 600010
job2 700010
job2 800010
job2 900010
job2 1000010
END: 1000010
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\测试多线程>

testThreading6_4.py

# 教学视频第6集
import threading
import time
def job1():global A, lockfor i in range(10):time.sleep(0.1)lock.acquire()  # 可以阻塞或非阻塞地获得锁。A += 1print('job1', A)lock.release()  # 释放一个锁。这个方法可以在任何线程中调用,不单指获得锁的线程。def job2():global A, lockfor i in range(10):time.sleep(0.1)lock.acquire()A += 100000print('job2', A)lock.release()if __name__ == '__main__':# 实现原始锁对象的类。一旦一个线程获得一个锁,# 会阻塞随后尝试获得锁的线程,直到它被释放;任何线程都可以释放它。lock = threading.Lock()  A = 0t1 = threading.Thread(target=job1)t2 = threading.Thread(target=job2)t1.start()t2.start()t1.join()t2.join()print('END:',A)

控制台结果输出:

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。尝试新的跨平台 PowerShell https://aka.ms/pscore6加载个人及系统配置文件用了 924 毫秒。
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\测试多线程>  & 'D:\Python\Python37\python.exe' 'c:\Users\chenxuqi\.vscode\extensions\ms-python.python-2021.1.502429796\pythonFiles\lib\python\debugpy\launcher' '60135' '--' 'c:\Users\chenxuqi\Desktop\News4cxq\测试多线程\testThreading6_4.py'
job2 100000
job1 100001
job2 200001
job1 200002
job2 300002
job1 300003
job2 400003
job1 400004
job2 500004
job1 500005
job2 600005
job1 600006
job1 600007
job2 700007
job1 700008
job2 800008
job1 800009
job2 900009
job1 900010
job2 1000010
END: 1000010
(base) PS C:\Users\chenxuqi\Desktop\News4cxq\测试多线程>

python多线程模块threading学习笔记(5)之锁Lock相关推荐

  1. 【script】python多线程模块threading的使用

    import threading, timedef fun(n):'''测试函数,每条线程沉睡5秒'''with semaphore:# lock.acquire()print(n)time.slee ...

  2. python ipaddress模块_Python学习笔记-IP地址处理模块Ipy

    IP地址处理模块Ipy IPy模块可以很好的辅助我们高效完成IP的规划工作. 安装IPy模块[root@kurol ~]# python36 -m easy_install -i http://pyp ...

  3. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  4. 用生动的案例一步步带你学会python多线程模块

    鱼和熊掌不可兼得 鱼,我所欲也,熊掌,亦我所欲也,二者不可得兼,舍鱼而取熊掌者也. 从6月开始写公众号,连着四个月一直尽量保证一周五更,结果整天熬夜搞的身体素质骤降.十一休假决定暂时将公众号放放,好好 ...

  5. Python第三方库pygame学习笔记(一)

    Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...

  6. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  7. 唤醒手腕Python全栈工程师学习笔记(并发编程篇)

    01.Process进程基本介绍 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,进程是线程的容器. 什么是进程? 进程 ...

  8. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  9. Python中索引的学习笔记

    1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...

  10. Python地理做图——学习笔记

    Python地理做图--学习笔记 GMT 绘制海岸线 绘制地形并叠加海岸线 地理信息数据格式在线转换网址 适用OSGEO4w可以实现tif转nc,转grd 绘制grd和nc 除了投影方式-X, gmt ...

最新文章

  1. 解决idea控制台打印乱码问题
  2. [Array]Pascal's Triangle II
  3. bseg---faglflexta
  4. Apache Spark 1.5新特性介绍
  5. elasticsearch-jdbc同步myslq数据到elasticsearch
  6. 【CodeForces - 1041D】Glider (枚举起点,双指针 或 二分终点,思维)(知识点总结)
  7. 向模块化进军,创建类
  8. JMeter java.lang.OutOfMemoryError: PermGen space错误
  9. AndroidStudio配置NDK
  10. mongoDB 使用 mongoVue
  11. 理性看待SDN(软件定义网络)
  12. 如何做二维码批量又快速
  13. 计算机实验报告双绞线制作,双绞线的制作实验报告.docx
  14. WPS:WPS的论文使用技巧之成功解决如何在尾注设置的参考文献后添加致谢、附录等章节(图文教程)
  15. iphone科学计算器使用
  16. 网卡MAC地址是什么?
  17. java中两个数组的并集_Java数组并集
  18. 关于Shader wants normals, but the mesh doesn't have them的问题
  19. 依据中国BMI分类范围,统计人数
  20. 连接阿里云RDS数据库报错

热门文章

  1. 基于servlet+jsp 个人博客系统
  2. 租用GPU服务器跑深度学习模型心得
  3. mysql virt虚拟内存_Java进程VIRT虚拟内存
  4. VAM语料库--学习笔记
  5. cascading基本概念
  6. 精进1-如何反思 by采铜
  7. C++ 线段树,树状数组
  8. ubuntu 下载以及安装CPAN
  9. 以太坊geth节点同步亲测经历
  10. 什么是 HTTP Headers?