python全局变量global线程安全_对python多线程与global变量详解

今天早上起来写爬虫,基本框架已经搭好,添加多线程爬取功能时,发现出错:

比如在下载文件的url列表中加入200个url,开启50个线程。我的爬虫…竟然将50个url爬取并全部命名为0.html,也就是说,最后的下载结果,是有1个0.html(重复的覆盖了),还有1-150。下面是我的代码:

x = str(theguardian_globle.g)

#x为给下载的文件命的名

filePath = "E://wgetWeiBao//"+x+".html"

try:

wget.download(url,filePath)

theguardian_globle.g+=1

print x+" is downloading..."

except:

print "error!"

#这个是全局变量g的定义

global g

g = 0

后来终于发现问题:多线程+全局变量是个危险的组合,因为程序有多个线程在同时执行,多个线程同时操作全局变量,会引起混乱。在多线程中操作全局变量,应当给该操作加锁。

以下为修改后的代码:

函数:

def downLoad(url,num):

x = str(num)

filePath = "E://wgetWeiBao//"+x+".html"

try:

wget.download(url,filePath)

print x+" is downloading..."

except:

print "error!"

多线程消费者_给操作全局变量的语句加锁

class Cosumer(threading.Thread):

def run(self):

print('%s:started' % threading.current_thread())

while True:

global gCondition

gCondition.acquire()

while q.empty()==True:

gCondition.wait()

url = q.get()

num = theguardian_globle.g

theguardian_globle.g+=1

gCondition.release()

downLoad(url,num)

大功告成!

以上这篇对python多线程与global变量详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python123第五章_python 3.5学习笔记(第五章)

本章内容1、什么是模块2、模块的导入方法3、搜索路径4、重要标准库一、什么是模块1、模块本质上是一个以.py 结尾的python文件,包含了python对象定义和python语句。2、模块是用来从逻辑上组织python代码(定义变量、函数、类、逻辑等)以实现某种功能3、包&#xff1a…

string 长度_String源码解析

本章源码分析基于JDK1.7实现的接口String类被final修饰词修饰,代表不可修改的特性,它实现了三个接口,Serializable是序列化接口,Compareble是排序接口,Char是字符序列接口。主要成员变量char[]:String通过c…

将你一张表的值覆盖_山西联通携手华为完成长风商务区宏微协同,立体覆盖,打造5G精品网络...

近日,中国联通山西分公司(以下简称“山西联通”)在太原长风商务区继5G CA超高速率升级之后,又针对长风商务区两层活动区域进行了5G宏微协同的立体覆盖,实现了该区域5G网络的连续部署。长风商务区建筑结构设计新颖,占地面积3.06平方…

16速 java_不停歇的 Java 即将发布 JDK 16,新特性速览!

之前在 JDK 15 中预览的密封类和接口限制其余类和接口能够扩展或实现它们。该计划的目标包括,容许类或接口的做者控制负责实现它的代码,提供比访问修饰符更声明性的方式来限制超类的使用,以及经过提供模式分析的基础来支持模式匹配的将来方向…

局域网内文件传输速度_详解蒲公英路由器组网 实现文件共享

蒲公英路由器,除了具备普通路由器的功能之外,如图:最大的特色是可以实现智能组网:最大的特色是可以实现智能组网:采用全新自主研发的Cloud VPN技术替代传统VPN,基于SD-WAN智能组网方案,快速组建…

java emoji显示乱码_Java 解决Emoji表情过滤问题

Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。原因:UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。方法1.将已经建好的表也转换成utf8mb42&#xff0…

mongotemplate中save抛出异常_异常处理的三个好习惯 | Python 工匠

文 | piglei 编辑 | EarlGrey推荐 | 编程派(微信ID:codingpy)前言如果你用 Python 编程,那么你就无法避开异常,因为异常在这门语言里无处不在。打个比方,当你在脚本执行时按 ctrlc 退出,解释器就会产生一个 KeyboardI…

java 百度网盘上传_使用pcs api往免费的百度网盘上传下载文件的方法

百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的。环境准备:开通读写网盘的权限及获取access_token:http://blog.csdn.net/langyuezhang/article/details/47206621百度…

python缩进教学_Python缩进和选择学习

缩进Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件,如果条件成立,则执行归属于if的一个代码块。先看C语言的表达方式(注意,这是C,不是Python!)if ( i > 0 ){ x 1; y 2;}如果i …

php如何新建xml文件,PHP中的生成XML文件的4种方法分享

生成如下XML串Xml代码title1content12009-10-11title2content22009-11-11方法I.【直接生成字符串】使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件。这是最原始的生成XML的方法,不过有效!$data_array array(array(ti…

组态王能直接读取仪表数据吗_液晶多功能网络电力仪表PD800H

液晶多功能网络电力仪表PD800H-H44三相三线多功用电力表面,一般也被称作网络电力表面,它是一种数字化的监控设备,其功用集成了电量测量,情况监控,远程通讯为一体,作业原理上选用了现代核算机技术和数字信号…

python程序显示自己的版权_手把手教你Pycharm皮肤主题及个性化设置,python程序员必备-Go语言中文社区...

1.设置IDE皮肤主题File -> Settings -> Appearance -> Theme -> 选择“Alloy.IDEA Theme”根据自己的喜好设置字体大小,以及样式。2.修改字体大小File -> Settings > Editor -> Colors & Fonts -> Font -> Size -> 设置为“14”3…

java多线程activemq,多线程JMS客户端ActiveMQ

我正在使用以下代码创建多个JMS会话,以供多个使用者使用消息。我的问题是代码以单线程方式运行。即使消息存在于队列中,第二个线程也无法接收任何内容,而是继续轮询。同时,第一个线程完成对第一批的处理,然后返回并使用…

python cnn 实例_基于CNN的纹理合成实践【附python实现】

Q0: Preliminary knowledge of Texture SynthesisBaseline请见此处,下文所有的代码修改均建立此代码基础之上。1. 纹理合成简述​纹理合成(Texture Systhesis)技术主要应用于计算机图形学等领域,被用于模拟几何模型的表面细节、增强绘制模型的真实感。不…

php使用jasperreport,php-报表引擎指南(Pentaho,JasperReports,BIRT)

我在各种论坛和他们的网站上花费了大约4-5个小时,研究可以帮助我发展的报告工具.我是使用这种工具的新手,可以使用一些特定的指导.我正在开发一个Web应用程序,该应用程序将托管在一台服务器上,但是多个用户可以通过登录进行访问.每个用户将拥有自己的帐户,并且只能访问仅与与其…

python中dlib库_python 基于dlib库的人脸检测的实现

本周暂时比较清闲,可以保持每日一更的速度。国外身份证项目新增需求,检测出身份证正面的人脸。最开始考虑mobilenet-ssd,经同事提醒,有现成的人脸库dlib,那就用传统方法尝试一下。dlib安装dlib的安装小费一波周折&…

php养老院管理系统,XYCMS养老院建站系统 v3.8

XYCMS养老院建站系统是一个专为养老院而设计的养老院建筑系统。中心信息管理:包括基本信息管理,添加,问答中心信息管理新闻动态管理:管理新闻信息内容,管理相关分类,添加或者删除生活环境内容管理&#xff…

php 修改文件访问时间,PHP中获取文件创建日期、修改日期、访问时间的方法

php获取文件创建时间、修改时间常用代码filemtime ( string filename )返回文件上次被修改的时间,出错时返回 FALSE。时间以 Unix 时间戳的方式返回,可用于 date()。例如:$afilemtime("log.txt");echo "修改时间:&…

超过响应缓冲区限制_Nginx如何限制并发连接数和连接请求数?

全网最全1500份Java学习资料、500份BAT面试真题:关注公众号,输入“面试题”,获取提取码!首先讲解两个算发:算法思想是:令牌以固定速率产生,并缓存到令牌桶中;令牌桶放满时&#xff0…

Php公钥加密data是空,php 生成加密公钥加密私钥实例详解

php 生成加密公钥加密私钥实例详解生成公钥私钥 win下必须要openssl.cof支持 liunx一般已自带安装$config array(//"digest_alg" > "sha512","private_key_bits" > 512, //字节数 512 1024 2048 4096 等"private_key_type" >…