Python多线程实用方法以及共享变量资源竞争问题


Posted in Python onApril 12, 2022

一,实用方法

  • 1.线程之间执行是无序的,cpu调度哪个线程就执行哪个线程;
  • 2.主线程等待所有子线程结束后再结束,设置守护线程可以实现当主线程结束时子线程立马结束;
  • 3.设置守护线程:1.threading.Thread(daemon=True),2.线程对象.setDaemon(True);
  • 4.线程之间共享全局变量,存在资源竞争问题。
'''
线程之间执行是无序的,cpu调度哪个线程就执行哪个线程
主线程会等待所有子线程结束之后再结束,设置守护线程可以实现当主线程结束时子线程立马结束
设置守护线程:1.threading.Thread(daemon=True),2.线程对象.setDaemon(True)
线程之间共享全局变量,存在资源竞争问题
'''
 
 
# 导入模块(模块名.py,包名init.py)
import threading
import time
 
 
def task1(count):
    # 获取当前线程对象
    # t=threading.current_thread()
    # print('Task1_name:',t.name)
    print()
    for i in range(count):
        print('Task A ',i+1)
        time.sleep(0.5)
 
def task2(content,count):
    print('Task2_name:', threading.current_thread().name)
    for i in range(count):
        print(f'{content}__Task B ',i+1)
        time.sleep(0.5)
 
 
if __name__ == '__main__':
 
    t1=threading.Thread(target=task1,name='T1',daemon=True,args=(5,))
    t2=threading.Thread(target=task2,name='T2',kwargs={'content':'Yes','count':5})
    # 设置守护主线程的第二种方式
    # t1.setDaemon(True)
    t2.setDaemon(True)
    t1.start()
    t1.join()   # 阻塞函数,t1执行完毕才会向下执行
    t2.start()
    # t2.join()
    print('Main thread over')

二、补充:Python多线程共享变量资源竞争问题

  • 1.资源竞争问题:sum+=1执行时大致会分为三步(取值、加1、写回),可能刚执行2步cpu就去切换到了另一个线程去执行;
  • 2.解决办法:1.使用join()方法来设置线程同步(效率不高),2.加锁(可以保证同一时刻只有一个线程在执行) 。
'''
资源竞争问题:sum+=1执行时大致会分为三步(取值、加1、写回),可能刚执行2步cpu就去切换到了另一个线程去执行
解决办法:1.使用join()方法来设置线程同步(效率不高),2.加锁(可以保证同一时刻只有一个线程在执行)
'''
 
import threading
import time
 
 
sum=0
lock=threading.Lock()
 
def add_num1():
    global sum
    for i in range(1000000):
        # lock.acquire()    # 加锁
        sum+=1
        # lock.release()    # 解锁
    print(f'{threading.current_thread().name}的计算结果是{sum}')
 
 
def add_num2():
    global sum
    for i in range(1000000):
        # lock.acquire()
        sum+=1
        # lock.release()
    print(f'{threading.current_thread().name}的计算结果是{sum}')
 
if __name__ == '__main__':
    t1=threading.Thread(target=add_num1)
    t2=threading.Thread(target=add_num2)
    t1.start()
    # 设置阻塞函数,设置线程同步
    t1.join()
    t2.start()
    print(f'Main的sum值是{sum}')

到此这篇关于Python多线程的使用详情的文章就介绍到这了!

Python 相关文章推荐
树莓派中python获取GY-85九轴模块信息示例
Dec 05 Python
Python合并字符串的3种方法
May 21 Python
python中cPickle类使用方法详解
Aug 27 Python
transform python环境快速配置方法
Sep 27 Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
python求最大公约数和最小公倍数的简单方法
Feb 13 Python
Python模块相关知识点小结
Mar 09 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 Python
Python pyecharts绘制条形图详解
Apr 02 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 #Python
Python闭包的定义和使用方法
Apr 11 #Python
什么是Python装饰器?如何定义和使用?
Apr 11 #Python
Python经常使用的一些内置函数
python处理json数据文件
Python几种酷炫的进度条的方式
Python通过loop.run_in_executor执行同步代码 同步变为异步
You might like
也谈 PHP 和 MYSQL
2006/10/09 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
php mysql 判断update之后是否更新了的方法
2012/01/10 PHP
将php数组输出html表格的方法
2014/02/24 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
javascript 进度条 实现代码
2009/07/30 Javascript
js 加载并解析XML字符串的代码
2009/12/13 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
Node.js实现发送邮件功能
2017/11/06 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
tensorflow获取变量维度信息
2018/03/10 Python
tensorflow之并行读入数据详解
2020/02/05 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
美国香薰蜡烛品牌:PADDYWAX
2018/10/06 全球购物
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
机械个人求职信范文
2014/01/24 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
上课迟到检讨书
2015/05/06 职场文书
奖励申请报告范文
2015/05/15 职场文书
Python中的tkinter库简单案例详解
2022/01/22 Python
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL