python图形界面多线程关闭问题

多线程

一个程序对应一个进程,但是一个进程可以对应多个线程。

我们平时在做图形界面的时候,经常会遇到处理一些耗时操作,比如请求接口或者进行一些复杂运算。这个时候我们就可以将前端界面UI设置为主线程,处理复杂的业务逻辑的事情交给子线程处理。

使用线程方法

import threading

def func_1():
    while True:
        print("子线程")

if __name__ == "__main__":
    print("主线程")
    t1 = threading.Thread(target=func_1)
    t1.start()

如果命令行执行这个程序的话,你会发现即使ctrl+c关闭了主线程,子线程依然在执行,这个在UI程序里面对应的就是界面关闭了,后台还在运行程序,我们需要做的就是将子线程守护到主线程上,也就是将子线程设置成守护进程,一旦主线程销毁,它也会销毁。

import threading

def func_1():
    while True:
        print("子线程")

if __name__ == "__main__":
    print("主线程")
    t1 = threading.Thread(target=func_1)
    t1.setDaemon(True)
    t1.start()

线程中的常用方法

  • start 执行线程,执行的是线程中的run方法
  • run 线程实际运行的方法
  • is_alive 判断线程是否存活,
  • join 将子进程加入到主线程队列中,也就是说主线程关闭之后会阻塞,直到所有join队列中的线程执行完毕。