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

比如在下载文件的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变量详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

python全局变量global线程安全_对python多线程与global变量详解相关推荐

  1. python全局变量可以改变吗_在Python中避免我的全局变量,我有几个函数可以改变一个变量...

    我试图摆脱我的全局变量,但我不是成功的. 在这种情况下,我让用户在运行程序时分配坐标.从这些坐标开始,我们开始驾驶一艘船(在矩阵内),这意味着我控制运动的功能需要从输入功能访问这些坐标.移动功能还需要 ...

  2. python全局变量一般没有缩进_关于Python的全局变量和局部变量,以下选项中描述错误的是...

    [判断题]传统的文本检索是围绕相关度这个概念展开的 [判断题]Wep加密方案不被容易破解 [判断题]卫星通信是指利用人造地球卫星作为中继站转发无线电信号,在两个或多个地面站之间进行的通信过程或方式 [ ...

  3. 微信小程序python解析获取用户手机号_微信小程序获取用户手机号详解

    最近在做一款微信小程序,需要获取用户手机号,具体步骤如下: 流程图: 1.首先,客户端调用wx.login,回调数据了包含jscode,用于获取openid(用户唯一标识)和sessionkey(会话 ...

  4. python中define的用法_#define用法,C语言#define详解

    C语言中,可以用 #define 定义一个标识符来表示一个常量.其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了. 预编译又叫预处理.预编译不是编译,而是编译前的处理.这 ...

  5. java线程休眠sleep函数_Java多线程中sleep()方法详解及面试题

    一. Java线程生命周期(五个阶段) 新建状态就绪状态运行状态阻塞状态死亡状态 如图 二.sleep方法 API中的解释 static voidsleep(long millis) 使当前正在执行的 ...

  6. python符号格式化设置区间_Python 数值区间处理_对interval 库的快速入门详解

    使用 Python 进行数据处理的时候,常常会遇到判断一个数是否在一个区间内的操作.我们可以使用 if else 进行判断,但是,既然使用了 Python,那我们当然是想找一下有没有现成的轮子可以用. ...

  7. python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...

  8. python整数池_对Python中小整数对象池和大整数对象池的使用详解

    1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提 ...

  9. python计算各类型电影的评分_【Python数据科学实战项目】之 基于MovieLens的影评趋势分析|详解...

    原标题:[Python数据科学实战项目]之 基于MovieLens的影评趋势分析|详解 注:图片源于https://movielens.org/ 1. 项目任务 1.1 数据来源 本项目使用Group ...

最新文章

  1. Spring Web Flow实例教程
  2. Java快速生成20亿数字_20 亿个数字在 4G 内存中如何去重排序:快来试一试 BitMap...
  3. python下sqlite增删查改方法(转)
  4. oracle 数字类型行转列,oracle行转列
  5. 【项目合作】最高50万元!道路缝隙检测、目标跟踪优化、机器人平台开发
  6. ssh整合之一spring的单独运行环境
  7. 易语言 存储过程 mysql_在易语言中调用MS SQL SERVER数据库存储过程(Transact-SQL)方法总结...
  8. Java Web应用实现GZIP压缩传输
  9. 天的故事 V1.0.2
  10. 程序员竟然钟爱这个!我 low了
  11. 在Windows上忽略Git存储库中的目录
  12. 我看《网络营销实战密码:策略 技巧 案例》这本书
  13. 算法与数据结构(二)-数组、链表(Array、Linked List)
  14. plextv 找不到服务器,【Apple TV教程】从Plex流式传输
  15. SNK,作为程序后缀的时候,是.net中的强密匙加密文件
  16. 文献阅读--Scaling Laws for Neural Lauguage Models
  17. 中信证券:降准并非货币宽松 缺口或达9000亿
  18. 中国传统的节日(端午节)
  19. 函数部分编程大作业(持续更新)
  20. 粉笔公考——错题集——行测

热门文章

  1. java 异常补偿解决_第三方接口调用异常补偿机制实现实例记录
  2. python代码怎么变成软件_Python变成技术
  3. 计算机职称业务工作业绩总结,档案职称工作业绩
  4. http请求502_从知乎页面的502说一说测试人员应该知道的HTTP协议状态码!
  5. java矩阵面积_Java基础 矩阵面积
  6. Java导入sql失败_java – 在hibernate中导入import.sql失败
  7. java mongodb 使用场景_mongodb使用场景一般是什么?mongodb有哪些基本命令?
  8. 线扫相机 编码器_面阵和线扫工业相机选型
  9. linux awk入门,awk入门应用
  10. ajax会占用服务器端内存吗,javascript - 为什么不允许在jquery datatable服务器端处理ajax成功使用? - 堆栈内存溢出...