python3 利用threading.Thread实现多线程编程
多线程可以将运行时间长的任务放到后台,转而执行其他任务,以提高效率基础概念可以看一下菜鸟的教程
https://www.runoob.com/python3/python3-multithreading.html
这里我做了一个简单的界面,便于理解多线程
界面是依赖tkinter库实现的。
其中包含三个按键和四个文本框
实现的功能是:
主线程使界面一直显示
开启线程1 的按钮 控制 线程1 在左上角文本框中每隔三秒打印一次时间
开启线程1 的按钮 控制 线程1 在右上角文本框中每隔三秒打印一次时间
选择文件的按钮 新建一个线程用于选择一个文件,并把文件目录打印在中间文本框里
还有无需按钮触发直接启动的线程,任务是在最下方文本框里每隔两秒打印一次时间
效果是:证明线程是并行的,即同一时间可以执行多项任务
虽然电脑是单核的,但是多线程之间切换的速度非常快以至于感受不到任务在切换执行,因此形成一种同时执行的感觉
比如上图中,19:22,19:25,19:27三个时间都同时在两个文本框中打印,说明几个线程在同步进行。
代码如下所示
这里建立线程的技巧是:
在button的command函数上不传递参数,而是调用一个传递参数并建立线程的函数
如果command函数带参数,则线程会在程序运行开始时自动执行,如果按下按钮,则会再建一个线程,相当于多建了一个线程。
from tkinter import *
from tkinter import scrolledtext,filedialog
import threading
import time
class MY_THREADING_TK():
#构造函数
def __init__(self,tkname):
self.tkname = tkname
#对窗口进行控件初始化
def tk_init(self):
#父窗口属性
self.tkname.title('多线程测试')
self.tkname.geometry('700x400+200+100')
#控件
#文本框
self.text_one=scrolledtext.ScrolledText(self.tkname,width=38,height=10)
self.text_one.place(x=50,y=