Python多线程的使用详情
作者:程序员班长 发布时间:2023-05-29 15:13:36
标签:Python,多线程,使用
一,实用方法
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}')
来源:https://kantlee.blog.csdn.net/article/details/122665298
0
投稿
猜你喜欢
- wechat_sender 是基于 wxpy 和 tornado 实现的一个可以将你的网站、爬虫、脚本等其他应用中各种消息 (日志、报警、运
- 相信大家在日常学习或者是阅读英文文章的过程中,难免会出现几个不认识的单词,或者想快速翻译某段英文的意思。今天,利用Python爬虫等知识,教
- 下面这些命令可以在命令行下用isql执行,isql -E -Q "命令",isql.exe
- 本文实例讲述了Python实现的序列化和反序列化二叉树算法。分享给大家供大家参考,具体如下:题目描述请实现两个函数,分别用来序列化和反序列化
- Oracle按不同时间分组统计的sql如下表table1: 日期(exportDate) &nbs
- 目录Python的引入变量的引入为什么要有变量定义变量常量引入常量池引入Python解释器Python变量存储机制Python垃圾回收机制引
- 使用File实现文件上传使用Form表单上传文件,fastapi使用File获取上传的文件。指定了参数类型是bytes:file: byte
- (1)应用于客户需要与不同的数据源进行交互时。数据可能来自不同的数据库,他们都有各自不同的复杂格式。但客户与这些数据库间只通过一种标准语言进
- 设计与开发之间本有一线界限,但当时代步入又一个十年,这个线变得更加模糊甚至感觉不到它的存在。使用PS设计网页版面,足矣?或许五年前是吧!现在
- 变量赋值与对象赋值对比<?php // 声明一个变量并赋值 $a = 1; // 将数据类型
- 年前接到QCon的邀请,颇感意外。在我的印象里,QCon大会是后端开发工程师和架构师的技术大会。后来去QCon大会的官网搜索了下,发现原来Q
- 关于数据库的逻辑设计,是一个很广泛的问题。本文主要针对开发应用中遇到在MS SQL Server上进行表设计时,对表的主键设计应注意的问题以
- 1、说明关键词传递以“形参变量名=实参”的形式参与实参关联,根据形参的名称进行参数传递,使实参和形参的顺序不一致。不用担心定义函数时参数的顺
- 事实上,当我们向文件导入某个模块时,导入的是
- 事情是这样的,博主初学python和机器学习,在跑一个代码的时候被提示出现以下错误:(能被提示出现这个错误,可见确实是初学了!)图1:跑代码
- overflow:hidden 用在div上时很好用,但直接用在td上,好像没有任何效果。td中的文本过长时依然自动换了一行像下面这要设定一
- 目的现有两幅栅格图像,一个是某地区道路栅格图,一个是某地区土地利用类型图,需要将道路叠加到土地利用类型图中,即叠加后,重合的像元值以道路图为
- Opera所属:挪威Opera Software ASA公司渲染引擎:自家的PrestoOpera起初是一款挪威Oper
- 中文字体设计发展到现在,风格越来越多样化,特别是在广告(美术)字体方面,因为字数少 局限小,优秀的作品层出不穷,比较突出的应用在标志设计唱片
- 快照复制是在数据库之间对数据以及数据库对象进行复制并进行同步,以确保多个数据库之间一致性的一个法宝。简单的说,快照复制就是实现把一个数据库服