多线程(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. C# .Net List<T>中Remove()、RemoveAt()、RemoveRange()、RemoveAll()的区别,List<T>删除汇总

    在List<T>中删除主要有Remove().RemoveAt().RemoveRange().RemoveAll()这几个方法.下面一一介绍使用方法和注意点. 我们以List<st ...

  2. 深入理解 Java 垃圾回收机制

            深入理解 Java 垃圾回收机制 一:垃圾回收机制的意义 java  语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员 ...

  3. 使用kettle来根据时间戳或者批次号来批量导入数据,达到增量的效果。

    1.Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.下载图形化界面的zip包格式的,直接解压缩使用即可.安装部署模式这里不说了 ...

  4. js-事件以及window操作

    属性 当以下情况发生时,出现此事件 onblur 元素失去焦点 onchange 用户改变域的内容 onclick 鼠标点击某个对象 ondblclick 鼠标双击某个对象 onfocus 元素获得焦 ...

  5. cmake教程

    1 教程 cmake界的hello world[2] 进阶的入门教程参考[3] 2 引用 [1] cmake官网 [2] 在 linux 下使用 CMake 构建应用程序 [3] Valgrind官网

  6. redis学习(八)——redis应用场景

    毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象 ...

  7. mac php7.0~7.2 memcache安装

    参考 https://www.uedbox.com/post/8924/ https://blog.csdn.net/bjbs_270/article/details/45642905 1. zlib ...

  8. HDFS及其各组件的机制

    一.HDFS运行机制 概述:用户的文件会被切块后存储在多台datanode节点中,并且每个文件在整个集群中存放多个副本,副本的数量可以通过修改配置自己设定. HDFS:Hadoop Distribut ...

  9. 【Go】那么多数值类型,应该选哪个?

    原文链接:https://blog.thinkeridea.com/201903/go/selection_of_numerical_types.html Go 内置很多种数值类型,往往初学者不知道编 ...

  10. blur和click事件冲突

    一.问题描述文本框的blur事件和div元素的click事件出现冲突.在input的blur事件中,我们隐藏div元素.在div的click事件中,我们清除input的内容,并隐藏自身.当我们在inp ...