python多线程共享变量的使用和效率

python基础编程:python多线程共享变量的使用和效率方法 今天小编就为大家分享一篇python多线程共享变量的使用和效率方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 python多线程可以使任务得到并发执行,但是有时候在执行多次任务的时候,变量出现“意外”。 import threading,time n=0 start=time.time() def b1(num): global n n=n+num n=n-num de... 阅读详情

python多线程可以使任务得到并发执行,但是有时候在执行多次任务的时候,变量出现“意外”。

import threading,time
n=0
start=time.time()
def b1(num):
	global n
	n=n+num
	n=n-num
def b2(num):
	for i in range(1000000):
		b1(num)
t1=threading.Thread(target=b2,args=(5,))
t2=threading.Thread(target=b2,args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
end=time.time()
print(n)
print(end-start)
执行结果:

18
0.7520430088043213
可见变量n从0变成了18,用时是0.75s,原因是计算机系统计算类似n=n+num是分两步计算的,先计算n+num的值放进内存中,然后再把计算的值赋值给n,正是这个间隙导致了变量出现“意外”。

这时候可以使用threading.Lock来把线程中的变量锁定,使用完再释放!

import threading,time
n=0
lock=threading.Lock()
start=time.time()
def b1(num):
	global n
	n=n+num
	n=n-num
def b2(num):
	for i in range(1000000):
			lock.acquire()#等待获取或获取修改变量的权限,并霸占它们
			b1(num)
			lock.release()#释放霸占的变量
t1=threading.Thread(target=b2,args=(5,))
t2=threading.Thread(target=b2,args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
end=time.time()
print(n)
print(end-start)
执行结果:

0
3.335190773010254
虽然变量的值正确了,但慢了很多倍,效率大大的打折扣,多线程的优势也没凸显出来。

所以尽量使用局部变量来代替全局变量在线程中使用,这样可以避免效率的问题。

Python中5个多线程技巧 尽量避免在多线程程序中使用全局变量,因为全局变量会导致线程之间的数据共享和竞争。理解了基本概念后,我们再来看看一些多线程的最佳实践,确保你的多线程代码高效且不会出问题。手动管理线程可能会很麻烦,特别是当你需要创建很多线程时。下面我们先来看一个简单的例子,看看如何创建和启动线程。在这个例子中,我们使用线程池来管理5个线程,并限制同时运行的线程数为3。在这个例子中,我们创建了两个线程,每个线程都执行。模块,可以方便地使用线程池来管理多个线程。来管理任务队列,避免了全局变量的使用。在这个例子中,我们使用。 阅读详情

相关推荐

python多线程爬虫

python多线程爬虫 python单线程爬虫对于应付小规模数据是可以的,但是面对大量数据,我们就要用到多线程爬虫技术。使用多线程,一方面可能会加快效率,另一方面可以施加一些小技巧,如不同的线程使用不同的代理ip从而避免出发反爬机制。 python 多线程 python的多线程可以用thread类来实现,具体实现的代码很简单,直接贴上就行了。 python线程还有一些标准库函数,如 threadi...

qq_28463395的博客 704

python thread join卡住_Python中join不能响应信号的问题

在文章subprocess模块用法中介绍了Python中的threading.Thread.join()时不能响应信号的问题。这个问题被Python官方标记为Bug。Python官方的Issue指出这个Bug与Python的signal、基础线程库thread(C实现)和高级线程库threading(Python封装)都有关,下面首先概览这三个模块的实现,接着通过编译调试的方式来观赏这个Bug的具...

weixin_39918690的博客 3250

AWS-解析mysql binlog同步数据方案

虽然是公有云的鼻祖,AWS在某些产品的实现却太不给力;可能是习惯了阿里云喂到嘴边的感觉,AWS很多方案需要自己折腾,蛋疼!比如这里要讲的mysql数据同步方案。 阿里云产品DTS,点几下就OK了,AWS,只能通过插件安装、配置、调试、蹚坑……,具体就是用msk的debezium插件连接器。没见识过的一脸懵逼,下面说下配置步骤和一些注意的坑。

sdmei 1406

python—多线程之死锁

一、造成死锁的原因 1、在多线程程序中,死锁问题很大一部分是由于线程同时获取多个锁造成的。 2、在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁。 3、尽管死锁很少发生,但一旦发生就会造成应用的停止响应。 二、产生死锁的四个原因 1、互斥条件:一个资源每次只能被一个线程使用。 2、请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放。3、不剥夺条件:线程已获得的资源,在末使用完之前,不能强行剥夺。 4、循环等待条件:若干线程之间形成一种头尾相接的循

python全栈 3827

YonSuite如何新增用户并分配角色角色授权图文教程

用友YonSuite产品基础教学

ct341688的博客 617

从量子兔AlphaPi硬件拆解到ESP32-C3库开发实战

本文详细拆解了量子兔AlphaPi开发板的硬件构成,重点分析了其核心ESP32-C3芯片及外围传感器。通过逆向工程揭示了GPIO引脚定义与通信协议,并实战演示了如何从零开发MicroPython库,驱动按键、加速度计及LED点阵,最终整合成一个互动平衡球游戏项目,展现了开源硬件在教育与二次开发中的潜力。

weixin_29164497的博客 458

python多线程

基本环境python2.71 thread模块调用thread模块中的start_new_thread()函数来产生新线程。 语法如下: thread.start_new_thread ( function, args[, kwargs] ) 参数说明: function - 线程函数。 args - 传递给线程函数的参数,他必须是个tuple类型。 kwarg

代码改变世界 1324

MMSE (Minimum Mean Square Error)均衡原理讲解

MMSE是一种将接收数据的MSE(均方误差)最小化的模型。有了这句话,很多问题就会在你的脑海中蹦出来。 什么是均方误差?最小化MSE "的物理含义是什么? 等等。 让我们从一个我们现在已经非常熟悉的通道模型开始。(我希望你现在也熟悉下面的表达方式。) MMSE作为一种均衡器,是一种后处理算法,它可以帮助我们找出接收到的数据,使之尽可能地接近原始数据(传输数据)。简而言之,MMSE中最重要的步骤是找到一个如下图所示的矩阵G。如果我们假设没有噪声,这个[G]矩阵可以简单的作为信道矩阵(H^-1)的倒数。但

Celeste的博客 4万+

python线程卡死怎样调试

Python,调试相关视频讲解:python的or运算赋值用法用python编程Excel有没有用处?011_编程到底好玩在哪?查看python文件_输出py文件_cat_运行python文件_shel调试Python线程卡死问题 在使用Python进行多线程编程时,有时会遇到线程卡死的情况,即线程停止响应但没有报错...

weixin_40633742的博客 294

iTunes登录协议逆向与自动化实现

本文详细解析了iTunes登录协议的逆向工程与自动化实现方法,涵盖请求体构造、签名生成和会话管理等关键技术。通过XML结构解析、X-Apple-ActionSignature生成原理及完整登录流程实现,帮助开发者高效完成iTunes自动化登录,提升工作效率。

weixin_26938645的博客 939

【深度学习时间序列预测案例】零基础入门经典深度学习时间序列预测项目实战(附代码+数据集+原理介绍)

本专栏整理了《深度学习时间序列预测案例》,内包含了各种不同的基于深度学习模型的时间序列预测方法,例如LSTM、GRU、CNN(一维卷积、二维卷积)、LSTM-CNN、BiLSTM、Self-Attention、LSTM-Attention、Transformer等经典模型,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 4万+

python中threading产生死锁_python多线程(一)——_thread & threading & 线程共享变量 & 互斥锁 & 死锁...

线程也是实现多任务的一种方式,一个进程中,也经常需要同时做多件事,就需要同时运行多个‘子任务’,这些子任务就是线程。一个进程可以拥有多个并行的线程,其中每一个线程,共享当前进程的资源。线程可以看出是轻量级的进程。多个线程共享内存,线程切换的开销小进程和线程在使用上各有优缺点: 线程执行开销小, 但不利于资源的管理和保护, 而进程正相反。在Python 程序中,可以通过“_thread”和 thre...

weixin_33238272的博客 272

【100%通过率】华为od机试C卷【出差 / 员工派遣】Java&Go 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2639

python3多线程共享变量_python多线程共享变量的使用和效率方法

python多线程可以使任务得到并发执行,但是有时候在执行多次任务的时候,变量出现“意外”。import threading,timen=0start=time.time()def b1(num):global nn=n+numn=n-numdef b2(num):for i in range(1000000):b1(num)t1=threading.Thread(target=b2,args=(...

weixin_39859061的博客 424

Vue3 - 完美解决 vite 打包后在本地浏览器直接打开运行,build 打包后双击 index.html 直接以 file 协议运行网站(资源、接口等正常访问,和部署到服务器运行效果一样)

vue3vite怎么支持file协议本地打开,vite打包文件如何支持files协议,支持双击即可打开网页,vue3vite打包后双击本地运行,vue3vite打包后怎么直接在浏览器双击打开访问,vite打包后显示空白,vite如何支持本地file协议打开,vue3vite打包后如何本地查看网站,vue3vite项目打包后本地启动白屏怎么办,vite打包后的代码如何在本地运行,vite+vue3打包在fIle本地index.html打开项目,打包后如何直接打开index.html文件,vue3

🏆 前端领域优质创作者 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python import的效率问题,python多线程共享变量的使用和效率方法

python多线程可以使任务得到并发执行,但是有时候在执行多次任务的时候,变量出现“意外”。import threading,timen=0start=time.time()def b1(num):global nn=n+numn=n-numdef b2(num):for i in range(1000000):b1(num)t1=threading.Thread(target=b2,args=(...

weixin_35678674的博客 324

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python和易语言爬虫速度_Python多线程爬虫,效率真的高

有些时候,比如下载图片,因为下载图片是一个耗时的操作。如果采用之前那种同步的方式下载。那效率肯会特别慢。这时候我们就可以考虑使用多线程的方式来下载图片。多线程介绍:多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。最简单的比喻多线程就像火车的每一节车厢,而进程则是火车。车厢离开火车是无法跑动的,同理火车也可以有多节车厢。多线程的出现就...

weixin_39620984的博客 866

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

wpf 多线程处理同步数据_Python多线程爬虫,效率真的高

有些时候,比如下载图片,因为下载图片是一个耗时的操作。如果采用之前那种同步的方式下载。那效率肯会特别慢。这时候我们就可以考虑使用多线程的方式来下载图片。多线程介绍:多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。最简单的比喻多线程就像火车的每一节车厢,而进程则是火车。车厢离开火车是无法跑动的,同理火车也可以有多节车厢。多线程的出现就...

weixin_39628063的博客 231

python多进程和多线程一起使用_Python(二):多进程与多线程

一,并发与并行并发:CPU使用一个核心在各程序之间交替执行,形成一种让人以为程序同时运行的错觉,并不会真正的提升执行效率和速度并行:CPU使用多个核心同时执行多个程序,各程序指令运行在不同的CPU内核上面,程序平行的向前推进,可以真正的提升执行速度二,遗留问题Python多线程只能使用一个核心,解释器的设计遗留问题利用CPU多核只能通过多进程,或者在线程中使用C语言扩展三,使用ThreadLoca...

weixin_39684995的博客 1343

python的多线程(第三篇)关于全局变量的一些理解

首先作者在第一篇文章就说了,线程之间是共享全局变量的,具体体现在,我们编写的代码中,我们自己定义了一个顺序执行(join()),那么就不会出错,但是当同时进行的时候,就会出错,上篇文章举过一个小案例 1,多线程同时对全局变量进行操作 import threading # 定义全局变量 g_num = 0 # 循环一次给全局变量加1 def sum_num1(): for i in r...

大老表的博客 7646

多线程爬虫

多线程爬虫 有些时候,比如下载图片,因为下载图片是一个耗时的操作。如果采用之前那种同步的方式下载。那效率肯会特别慢。这时候我们就可以考虑使用多线程的方式来下载图片。 多线程介绍: 多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。最简单的比喻多线程就像火车的每一节车厢,而进程则是火车。车厢离开火车是无法跑动的,同理火车...

bangyinyou3056的博客 1163

python3-线程-锁_使用互斥锁完成3个线程对同一个全局变量各进行100次加1操作。

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。线程同步能够保证多个线程安全访问竞争资源,最简单的同步机制是引入互斥锁。

2401_84584289的博客 887

python的假线程_Python多线程爬虫,效率真的高

有些时候,比如下载图片,因为下载图片是一个耗时的操作。如果采用之前那种同步的方式下载。那效率肯会特别慢。这时候我们就可以考虑使用多线程的方式来下载图片。多线程介绍:多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。最简单的比喻多线程就像火车的每一节车厢,而进程则是火车。车厢离开火车是无法跑动的,同理火车也可以有多节车厢。多线程的出现就...

weixin_29230773的博客 168

人人都能学会的 Python 多线程指南!

在 Python 中,多线程最常见的一个场景就是爬虫,例如这样一个需求,有多个结构一样的页面需要爬取,例如下方的URL

Python栈 314

python只能多进程并发不能多线程并发

python Thread、lock Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。 启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行: import time, threading ...

u010727746的博客 903

python多线程操作

多线程详解 线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包含在进行之中,是进程中的实际运作单位。线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属于一个进程的其他线程共享所拥有的全部资源。一个线程可以创建和撤销另外一个线程,同一个进程中的多个线程可以并发执行。 为什么要使用多线程 1、线程在程序中是独立的、并发的执行。与分隔的进程相比,进程中线程之间的隔离程度要小,它们共享内存、文件句柄和其他进程应有的状态。 2、线程的划分尺度小于进程,使得多线程程序的并发性高。进程在

李昂的博客 563
上一篇: python requests乱码解决方案
下一篇: python爬虫之异步IO
ioPython
博客等级 码龄10年 24粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值