python程序运行卡住的问题

fatso1984 2018-04-25 04:21:51
初学python写了个循环检测网站是否存活的脚本,但是脚本运行一段时间总是卡住。
我认为是在 r = requests.get(website['site'])这句需要时间执行,所有加了一个延迟,但是有时候依然会卡住,求教是什么问题。

import requests #引入包,python命令行执行 pip install requests
import os
import datetime
import time
# -*- coding: utf-8
from color import Color


class listener:

website_dict = None

#初始化时,读取所有网址记录
def __init__(self):
file = open(os.path.dirname(__file__) + "//website.hz",encoding='gbk')
self.website_dict = eval(file.readlines()[0])

#更新地址
def update_website(self):
file = open(os.path.dirname(__file__) + "//website.hz",'w+')
file.write(str(self.website_dict))
file.close()

#连接单一网站
def connect_website(self, website):
r = requests.get(website)
return r.headers

#测试连接是否正常
def connect_test_website(self,website):
try:
self.connect_website()
except:
print('连接失败')

#连接所有网站
def connect_all_website(self):
log = ''
error_log = ''

for website in self.website_dict:
try:
r = requests.get(website['site'])
time.sleep(3)
except:
#连接失败,可发送短信
error_log = error_log + self.get_time() + ' ' + website['name'] + '连接失败' + '\n'
Color().print_red_text(self.get_time() + ' ' + website['name'] + '连接失败')
else:
if(r.status_code == 200):
log = log + self.get_time() + ' ' + website['name'] + '连接成功' + '\n'
print(self.get_time() + ' ' + website['name'] + '连接成功')
else:
#status_code但是网页有内容的
if(len(r.content) > 100):
log = log + self.get_time() + ' ' + website['name'] + '连接成功,存在前端防护设备' + '\n'
print(self.get_time() + ' ' + website['name'] + '连接成功,存在前端防护设备')
else:
print(r.status_code)
error_log = error_log + self.get_time() + ' ' + website['name'] + '连接异常,请及时检查' + '\n'
Color().print_red_text(self.get_time() + ' ' + website['name'] + '连接异常,请及时检查')

self.save_log(log)
self.save_error_log(error_log)


#取得当前时间
def get_time(self):
return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

#写日志
def save_log(self, log):
#每天一个独立日志
file_name = datetime.datetime.today().strftime("%Y%m%d") + '.log'
file = os.path.abspath(os.path.dirname(__file__) + "//" + file_name)
self.write(log, file)

def save_error_log(self, log):
#每天一个独立错误日志
file_name = datetime.datetime.today().strftime("%Y%m%d") + 'error.log'
file = os.path.abspath(os.path.dirname(__file__) + "//" + file_name)
self.write(log,file)

def write(self, log, file):
file_name = datetime.datetime.today().strftime("%Y%m%d") + 'error.log'
file = open(file, 'a+', encoding='gbk')
file.write(log)
file.flush()
file.close()


#循环执行任务
def start_listener(self,seconds):
while True:
self.connect_all_website()
time.sleep(seconds)

#初始化程序
def init(self):
while True:
minute = input('请输入间隔运行时间,单位(分钟):')
if minute.isdigit():
break
else:
print('输入的格式不正确请重新输入')
self.start_listener(int(minute))
if __name__ == '__main__':
listener().init()

...全文
2991 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2018-04-25
  • 打赏
  • 举报
回复
这个是网络请求,可能有超时。一般用异步方法来避免租塞。
微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 微信小程序系统教程共有“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]——核心技术”、“微信小程序系统教程[阶段]客服消息+微信支付+九宝电商系统”。 “微信小程序系统教程[阶段]全套课程”包含: 1.微信小程序系统教程[阶段]_客服消息 2.微信小程序系统教程[阶段]_微信支付 3.微信小程序系统教程[阶段]_九宝电商系统 学习“微信小程序系统教程[阶段]”要求有微信小程序的基础。建议先学习“微信小程序系统教程[初级阶段]”、“微信小程序系统教程[中级阶段]”,后在报名“微信小程序系统教程[阶段]”。 阶段讲解的客服消息,是针对小程序的。后台程序用接近底层的技术,没有使用三方技术。这样降低同学们学习成本。 微信支付,这部分课程很有难度,要求同学们认真听讲,有不会的技术问题可以请教老师。购买课程后请联系老师,提供单号,给你源程序。 九宝电商系统是一套十分适和学习、项目的课程。既可以系统的学习微信小程序相关知识,还可以修改后上线。 “微信小程序系统教程[中级阶段]——核心技术”重点讲解微信小程序事件、组件、API 微信小程序系统教程[初级阶段],微信小程序0基础学起,讲解微信小程序开发的基础知识。 购买课程的同学,可赠送就九宝老师编写的《微信小程序开发宝典》。 购课请咨询qq2326321088

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧