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版
Dec 07 Python
python使用os模块的os.walk遍历文件夹示例
Jan 27 Python
从零学Python之入门(四)运算
May 27 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
Python编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
用python找出那些被“标记”的照片
Apr 20 Python
python中利用xml.dom模块解析xml的方法教程
May 24 Python
Python批量发送post请求的实现代码
May 05 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
php版微信公众平台接口开发之智能回复开发教程
2016/09/22 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
javascript 数组排序函数
2009/08/20 Javascript
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
javaScript同意等待代码实现心得
2011/01/01 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
Python中的生成器和yield详细介绍
2015/01/09 Python
基于python socketserver框架全面解析
2017/09/21 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
世界领先的电子书网站:eBooks.com(在线购买小说、非小说和教科书)
2019/03/30 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
生物制药自我鉴定
2014/01/25 职场文书
会计专业自我评价
2014/02/12 职场文书
高三学习决心书
2014/03/11 职场文书
刊首寄语大全
2014/04/11 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
2014年平安夜寄语
2014/12/08 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
python 安全地删除列表元素的方法
2022/03/16 Python
instantclient客户端 连接oracle数据库
2022/04/26 Oracle