python线程监控_python多线程验证web站点活性代码

news/2024/11/9 17:18:44

代码缘起

在日常的网页挖掘中,有些站点的数据需要经常性的进行爬取,但是有时候会出现部分web站点因为种种原因而下线,这时爬取将严重影响数据爬取效率,通过编写一个web站点状态的验证,在网站爬取前,首先明确站点状态,并记录状态,从而对于每个站点的出错概率和当前状态有所了解,避免盲目爬取

代码思路用一个文本文件记录需要验证的站点,其中数据格式如下

站点名称|站点地址|错误次数

一共三个字段,每个字段用"|"进行分割,其中错误次数是指该站点累计出错的次数(目前主要通过http状态的非200确定。

通过队列开多线程,加速验证过程。所有输入数据读入一个queue中,所有输出数据到一个queue中。

建立线程函数,在线程函数中通过queue.get(False)获得相关数据,设置False表示不等待,这样才不会出错。

在主程序中启动线程

在主程序中监控线程运行情况,并回收数据,写入文件

代码自己会说话#coding=utf-8#验证站点的活动性,标注死站点#使用多线程模式import timeimport osimport reimport sysimport requestsimport threadingimport Queuedef myinit():

reload(sys)

sys.setdefaultencoding('utf8')##检查站点活动函数def chect_active(url,chaoshi=10):

code=0

try:

r=requests.get(url,timeout=chaoshi)

code=r.status_code except Exception , e:

code=-1

if code!=200:

code=-1

return code#检查线程函数def thread_check_active(jobslink_queue,jieguo_queue):

while True: try:

dic_webinfo=jobslink_queue.get(False) #False =Don't wait

except Queue.Empty: return

if chect_active(dic_webinfo['weburl'])==-1:

dic_webinfo['count']=int(dic_webinfo['count'])+1

jieguo_queue.put(dic_webinfo)

myinit()

jobslink=Queue.Queue(0)

jieguo=Queue.Queue(0)

xiaoshuo_zhandian="xiao_shuo_zhan_dian.txt"inputfile = open(xiaoshuo_zhandian, 'r')

list_of_all_the_lines = inputfile.readlines( )

inputfile.close()for line in list_of_all_the_lines:

(t2,xiaoshuourl,count)=line.decode('utf8').rstrip().split("|")

jobslink.put({'webname':t2,'weburl':xiaoshuourl,'count':count})

THREAD_NUM=5for x in range(THREAD_NUM):

t=threading.Thread(target=thread_check_active,args=(jobslink,jieguo))

t.start()

f=open(xiaoshuo_zhandian,'w')

mycount=0#结果数据写入文件while (threading.activeCount()>1) or (not jobslink.empty()): while jieguo.qsize()>0 : if(jieguo.qsize()>0):

jieguotxt=jieguo.get()

f.write("%s|%s|%d\n"%(jieguotxt['webname'],jieguotxt['weburl'],int(jieguotxt['count'])))

mycount=mycount+1

if(mycount%100)==0: print u"%d: 活动线程:%d,剩余连接数:%d,结果剩余条数:%d"%(mycount,threading.activeCount(),jobslink.qsize(),jieguo.qsize())

time.sleep(0.01)

f.close()print u"站点验证完成"

作者:明慢慢

链接:https://www.jianshu.com/p/9c54fc346147


http://www.niftyadmin.cn/n/3661307.html

相关文章

server多列转行 sql_SQL Server 2008列转行问题

我统计出公时表的数据,如下createtableoperator(begin_timedatetime,end_timedatetime,op_idchar(4),work_timeint)insertintooperatorselect2013-03-0100:00:00,2013-03-0200:00:0...我统计出公时表的数据,如下create table operator(begin_time datetime,end_time datetime,o…

easy connect 获取服务端配置信息失败_技术小贴士——基于springboot实现websocket服务端及测试客户端...

技术小贴士—基于springboot实现websocket服务端及测试客户端目录1.webSocket简介2.使用场景3.工程简介3.服务端webSocketServer 所需pom依赖 开启webSocket所需要的配置支持 webSocket服务端 需要注意的问题及常见异常4.客户端webSocketClient 所需pom依赖 webSoc…

[瞭望]从西溪湿地到中山古镇 --看“经营政府”

2006年09月13日 23:26:00 因为ZJ项目的培训需要,我离开泰安,奔赴大上海。或许是在泰安生活得久了,在上海的日日夜夜,我对它的快节奏深有感触:早晨起得要早,并且要随时带点可以阅读的资料,这样才…

暗黑2魔电西格玛攻略_【暗黑3资讯】暗黑攻略站:死灵法师无敌死疫尸矛详解...

欢迎收看本期的暗黑攻略站,本节目作为《暗黑3分钟》系列的延伸,将为各位因时长不足而无法展示到节目中的玩法介绍和机制剖析。本期我们的主角是死灵法师的无敌死疫尸矛,他造价低廉且特效炫酷,适合拿来速刷~视频1:暗黑3…

python数据清洗实例_2020 版 Python 数据清理终极指南!

作者 | Lianne & Justin 译者 | 陆离 一般来说,我们在拟合一个机器学习模型或是统计模型之前,总是要进行数据清理的工作。因为没有一个模型能用一些杂乱无章的数据来产生对项目有意义的结果。 数据清理或清除是指从一个记录集、表或是数据库中检测和…

[数据库]Oracle的培训讲师是个东北人

2006年12月25日 23:23:00 这是我这么多年来,听过的最痛快的技术培训,或许也是因为我在若干年前就对培训内容比较掌握的缘故吧,当我更感觉是因为Oracle的培训体系之精妙和讲师的妙语连珠,是我重新燃起了对Oracle的兴趣。体系之精妙…

b超可以看出什么_做B超,涂在肚子上黏糊糊的液体是什么?

说到B超检查,相信很多人都做过,尤其是孕妇,在孕期会做这项检查,了解肚子里宝宝的健康,对于普通人来说,也可以进行B超检查,充分判断脏腑器官好坏。作为最基本、最常见的检查项目,大家…

springboot controller里出现异常会导致服务器宕机_教你如何在Spring Boot中使用RSocket...

1. 概述RSocket应用层协议支持 Reactive Streams语义, 例如:用RSocket作为HTTP的一种替代方案。在本教程中, 我们将看到RSocket用在spring boot中,特别是spring boot 如何帮助抽象出更低级别的RSocket API。2. 依赖让我们从添加sp…