python运行卡死,python程序卡住

  python运行卡死,python程序卡住

  本文主要介绍Python对爬虫卡顿问题的解决方案。文章围绕主题,详细介绍,具有一定的参考价值。有需要的朋友可以参考一下。

  00-1010前言:简单粗暴的解决问题的方法,增加一点难度的解决方法。我们继续给爬虫添加一些素材。

  

目录

  在上一篇文章中,我们已经开始了爬虫程序的exe之旅,但是我们最终意识到的程序中有一个非常大的问题。发出网络请求时,程序会卡死,直到数据请求回来,程序才会走出假死状态。今天这个博客核心就来解决这个问题。

  造成这个问题的原因是GUI程序在执行高IO操作时容易出现假死和无响应。一般的解决方案是多线程。

  如果想拓展这个知识点的学习,可以在搜索引擎中搜索tkinter假死,无反应等关键词。

  

前言:

  找到上节课需要修改的代码部分 :

  修改成如下代码,立马解决问题:

  def thread_down(func,*args):

  #创建线程

  t=螺纹。线程(target=func,args=args)

  t.setDaemon(True)

  #开始

  启动()

  #创建按钮

  Btn=tk。Button(win,text=分析下载,command=lambda 3360 thread _ down(down _ img))

  当然记得在头部导入线程模块:

  导入线程

  对于经常写爬虫的编码人员来说,多线程很容易理解,无需过多解释。注意t.setDaemon(True)。

  通过t.setDaemon(True)(默认为False)将子线程设置为守护进程,守护进程子线程将在主线程结束后终止。

  以上是最简单的解决方法,按照这个思路慢慢修改你的程序就行了。

  

简单粗暴解决问题

  这个方案假设你的爬虫比较复杂,由一个类编写,那么只需要添加一个类文件,继承了线程。线程类。

  类MyThread(线程。螺纹):

  def __init__(self,func,*args):

  超级()。__init__()

  self.func=func

  self.args=args

  self.setDaemon(True)

  Self.start() #启动构造函数中的线程

  定义运行(自身):

  self.func(*self.args)

  #创建按钮

  Btn=tk。Button(win,text=分析下载,command=lambda 3360 mythread(down _ img))

  上面的解决方案也比较简单,重点还是把I/O耗时的操作放到一个新线程中。

  我们注意在将值绑定到tk中的命令时使用的lambda函数。上面代码中的Button(win,text=分析下载,command=lambda 3360 mythread(down _ img))。

  众所周知,Lambda是一个匿名函数,这里的用法是tk要求的。

  他表示 传参数Button绑定事件,文档中大概意思如下:

  我们使用Button传递数值时,需要用:

  Lambda:函数(var1、var2、…)

  所以大家在使用的时候要注意这个问题~ ~

  

增加一点点难度的解决方案

  以上已经解决了一个小问题,当然这还不够。我们的程序超越了

  此,接下来,我们每次访问页面的时候,网页源码的图片规则肯定是不能确定的,所以用户可以自定义正则表达式去匹配数据,就是我们接下来改进的方向啦~

  先把程序窗口扩大一些

  

# 窗体大小设置

  width = 800

  height = 600

  增加一个文本框和一个多行输入框:

  

lbtip = tk.Label(win, text=请输入正则表达式:)

  # 添加到窗口中

  lbtip.grid(row=1,column=3,pady=20)

  # 创建一个多行文本框 - 用于输入正则表达式

  t1 = tk.Text(win, width=40,height=20)

  # 添加到窗口中

  t1.grid(row=2,column=3,padx=20,columnspan=3)

  看看布局,细节可以在调整一下:

  

  获取正则表达式输入框数据:

  这个地方一个小知识点需要补充下,在tkiner中有两种文本框,单行和多行,对于里面内容的获取方式也不同

  

#get()方法获取Entry 文本框的内容:

  txt = entry.get()

  #get()方法获取Text 文本框的内容:

  txt = text.get("0.0", "end")

  Text.get(start, end) 的用法:

  

Text.get("0.0", "end") 解析: 第一个参数‘0.0’是指从第0行第0列开始读取(‘0.3’表示从第0行第3列开始读取),第二个参数end表示最后一个字符

  

  写完测试下:

  

  测试完毕:

  

  

  

尾声

  tkiner其实写起来慢慢调整还是蛮有意思的,可以用来开发一些不错的小工具

  测试连接http://baijiahao.baidu.com/s?id=1667856639211368322测试正则<img class="large" data-loadfunc=0 src="(.*?)"

  到此这篇关于Python解决爬虫程序卡死问题的文章就介绍到这了,更多相关Python卡死问题内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: