多线程(threading——join)

join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,

才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法。join([timeout]) 里面的参数时可选的,代表线程运行的最大时

间,即如果超过这个时间,不管这个此线程有没有执行完毕都会被回收,然后主线程或函数都会接着执行的,如果线程执行时间小于参数表示的

时间,则接着执行,不用一定要等待到参数表示的时间。

 import threading
 import time
 #创建两个测试的变量
 num_1 = 0
 num_2 = 0
 def te_1():
     global num_1
     #将num_1加到 3
     for i in range(3):
         num_1 += 1
         print("我是num_1: " + str(num_1))
         time.sleep(1)
 def te_2():
     global num_2
     #将num_2加到 3
     for i in range(3):
         num_2 += 1
         print("我是num_2: " + str(num_2))
         time.sleep(1)
 t1 = threading.Thread(target=te_1)
 t1.start()
 t2 = threading.Thread(target=te_2)
 #join为等待线程,等待t1线程执行完,再执行t2线程
 t1.join()
 t2.start()

多线程(threading——setDeamon)

setDaemon()方法。主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(),这个的意思是,把主线程A设置为守护线程,这

时候,要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出.这就是setDaemon方法的含义,这基本和join是相反的。此外,还有

个要特别注意的:必须在start() 方法调用之前设置,如果不设置为守护线程,程序会被无限挂起,只有等待了所有线程结束它才结束。

 import threading
 import time
 #创建两个测试的变量
 num_1 = 0
 num_2 = 0
 def te_1():
     global num_1
     #将num_1加到 3
     for i in range(3):
         num_1 += 1
         print("我是num_1: " + str(num_1))
         time.sleep(1)
 def te_2():
     global num_2
     #将num_2加到 5
     for i in range(5):
         num_2 += 1
         print("我是num_2: " + str(num_2))
         time.sleep(1)
 t1 = threading.Thread(target=te_1)
 t1.start()
 t2 = threading.Thread(target=te_2)
 #守护进程t2,当t1执行完后不再去执行t2
 t2.setDaemon(t1)
 t2.start()

下面是如何解决time.sleep,其实非常简单,只需要创建一个线程让他自己执行就可以了

 """小白随笔,大佬勿喷"""
 '''tkinter解决time延迟问题'''
 import tkinter as tk
 import time
 import threading
 #初始化窗口
 window = tk.Tk()
 #窗口名称
 window.title("My Window")
 #窗口大小,是 x 不是 *
 window.geometry("400x400")
 #不能改变窗口的大小
 window.resizable(width=False,height=False)
 def count():
     label = tk.Label(window,bg='green')
     label.pack()
     button.pack()
     while True:
         try:
             #获取当前时间
             date = time.strftime("%Y-%m-%d\n%H:%M:%S")
             label.config(text=date)
             #更新窗口
             window.update()
             time.sleep(1)
         except:
             break
 #创建按钮,只是为了测试sleep与按钮之间是否存在延迟
 button = tk.Button(window,text='Hit_me',width=20)
 #创建线程,如果函数里面有参数,args=()
 t = threading.Thread(target=count)
 #开启线程
 t.start()
 #循环窗口
 window.mainloop()

技术有限,不会录制gif图

解决python tkinter 与 sleep 延迟问题的更多相关文章

  1. 剖析和解决Python中网络粘包的正确姿势

    目录 1.粘包及其成因 1.1.粘包产生 1.2.粘包产生的原因 2.尝试解决粘包 2.1.指定数据包的长度 2.2.固定数据包的长度 2.3.用函数实现多次调用发送数据 3.解决粘包问题的正确姿势 ...

  2. paip.日志中文编码原理问题本质解决python

    paip.日志中文编码原理问题本质解决python 默认的python日志编码仅仅gbk...保存utf8字符错误..输出到个eric5的控制台十默认好像十unicode的,要是有没显示出来的字符,大 ...

  3. (原)怎样解决python dataframe loc,iloc循环处理速度很慢的问题

    怎样解决python dataframe loc,iloc循环处理速度很慢的问题 1.问题说明 最近用DataFrame做大数据 处理,发现处理速度特别慢,追究原因,发现是循环处理时,loc,iloc ...

  4. 解决 python 读取文件乱码问题(UnicodeDecodeError)

    解决 python 读取文件乱码问题(UnicodeDecodeError) 确定你的文件的编码,下面的代码将以'utf-8'为例,否则会忽略编码错误导致输出乱码 解决方案一 with open(r' ...

  5. Python 解决Python安装包时提示Unable to find vcvarsall.bat的问题

    解决Python安装包时提示Unable to find vcvarsall.bat的问题   by:授客 QQ:1033553122 问题 Python安装包时,提示Unable to find v ...

  6. Python Tkinter基础控件入门实例

    分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 ...

  7. Python Tkinter 学习成果:点歌软件music

    笔者工作业余时间也没什么爱好,社交圈子也小,主要娱乐就是背着自己带电瓶的卖唱音响到住地附近找个人多的位置唱唱KtV. 硬件上点歌就用笔记本电脑,歌曲都是网上下载的mkv格式的含有两个音轨的视频.因此点 ...

  8. Python Tkinter Entry(文本框)

    Python学习记录--关于Tkinter Entry(文本框)的选项.方法说明,以及一些示例. 属性(Options) background(bg) borderwidth(bd) cursor e ...

  9. python tkinter Listbox用法

    python tkinter组件的Listbox的用法,见下面代码的演示: from tkinter import * root=Tk() v=StringVar() #Listbox与变量绑定' l ...

随机推荐

  1. java---- XMLEncoder 和 XMLDecoder 和 xSteam工具使用

    XMLEncoder: 将对象写入XML数据中 import org.dom4j.DocumentException; import java.beans.XMLEncoder; import jav ...

  2. Sicily T-primes

    DescriptionWe know that prime numbers are positive integers that have exactly two distinct positive  ...

  3. 【Linux】Linux简介

    思维导图 什么是Linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统. Linux能运行主要的UNIX工 ...

  4. (DP) 关于最优三角剖分

    https://www.cnblogs.com/Konjakmoyu/p/4905563.html 这个人写的好 最优三角剖分的核心思想: 确定决策顺序. 有时一个解可以用许多决策顺序得出, 这时候我 ...

  5. S0.2 灰度图

    目录 灰度图定义 灰度图优点 RGB转灰度算法(OpenCV3) 量化 算法公式 OpenCV自带函数实现 综合比较 灰度图定义 对于单色(灰度)图像而言,每个像素的亮度用一个数值来表示,通常数值范围 ...

  6. C++ 控制台推箱子小游戏

              // 游戏菜单.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #in ...

  7. web测试注意点

    关于网页测试我们需要注意的地方有: 1.每次测试之前都需要代码更新.清理缓存,测试数据使用新数据. 2.各模块的信息归类是否正确.比如进入一级栏目或二级栏目的列表页,查看左侧栏目名称,右侧文章标题及内 ...

  8. Vue使用vue-echarts图表

    vue-echarts和echarts的区别: vue-echarts是封装后的vue插件, 基于 ECharts v4.0.1+ 开发,依赖 Vue.js v2.2.6+,功能一样的只是把它封装成v ...

  9. HTML5_音视频标签 <audio> 和 <video>

    HTML5_音视频标签 <audio> 和 <video> audio 和 video 都是 inline行内元素 如果浏览器支持,则不显示标签文本 IE8 不支持 audio ...

  10. Ajax_简介: 异步的 JS 和 XML_原生写 ajax 分析其原理_jquery_ajax_art-template

    AJAX Asynchronous JavaScript And XML 通过 AJAX 可以在 浏览器中向 服务器 发送异步请求 一种 使用现有标准的 新方法,而非新语言 XML  可扩展标记语言 ...