对python多线程与global变量详解
作者:hsj_csdn 发布时间:2021-03-05 20:34:48
标签: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)
大功告成!
来源:https://blog.csdn.net/hsj_csdn/article/details/55505475


猜你喜欢
- 导航标签彼此互斥、完全穷尽。导航标签其实就是一种文字表达形式,我们用标签来代表网站上的各种分类信息。比如“联系我们”这个标签,代表的内容通常
- 本文实例讲述了基于wxpython实现的windows GUI程序。分享给大家供大家参考。具体如下:# using a wx.Frame,
- 最近开始学习数据库知识,从mysql下手,下面详细介绍一下安装过程,给小伙伴们一个参考。一、安装 首先,从mysql的中文社区下载,我尝试过
- 1 装饰器背景知识1.1 基本概念装饰器(Decorator)是 Python 中一种函数或类,用来修饰其他函数或类。装饰器可以改变被装饰函
- 前言python内置了一些非常巧妙而且强大的内置函数,对初学者来说,一般不怎么用到,我也是用了一段时间python之后才发现,哇还有这么好的
- 如下所示:import numpy as npimport pandas as pdfrom pandas import Sereis, D
- 1、选取最适用的字段属性MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表
- 首先定义了一个test.py的文件,然后再定义一个函数,并在函数定义后直接运行:test.pydef HaveFun(): if __nam
- 一,什么是mycat一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL
- 不论什么语言,我们都需要注意性能优化问题,提高执行效率。选择了脚本语言就要忍受其速度,这句话在某种程度上说明了Python作为脚本语言的不足
- 农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守。昨日,微信支付现金红包接口正式开放,只需开
- 目录模块与包__import__模块缓存imp 与 importlib 模块惰性导入总结参考资料本文不讨论 Python 的导入机制(底层实
- vue代码压缩优化设置productionSourceMap为false如果不需要生产环境的 source map,可以将其设置为 fals
- strip_tags定义和用法strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。注释:该函数始终会剥离
- 我就废话不多说了,大家还是直接看代码吧~// 窗体透明,控件不透明self.setWindowFlags(Qt.FramelessWindo
- 通过前面内容的介绍,我们对 Surface 对象有了大体上的认识。Pygame 针对文本、图像、颜色提供了不同模块来生成它们各自的 Surf
- 一、背景分析对想要在视觉化环境下制作复杂网页的专业网页制作者来说,Dreamweaver已经渐渐在网页编辑工具中展露头角,成为专业人士编写网
- 一个什么都不懂的家伙非跟我要个sql查询器 随便写了一个,当然为了数据安全,要过滤掉一个sql关键词和系统中的一些表了 哦,对了,里面的一些
- 使用场景先来观察以下代码:abstract class base { //do sth}class aClass extends
- 开始制作符合标准的站点,第一件事情就是声明符合自己需要的DOCTYPE。查看本站首页原代码,可以看到第一行就是:<!DOCTYPE h