Python threading模块基础用法与守护线程详解

桃夭
桃夭
发布时间:2026-10-13 | 5人浏览过
原创

本文详细解析Python中threading模块的基本使用方法,包括如何正确传递元组参数、启动与等待线程执行。重点介绍守护线程(Daemon Thread)的设置及其对主线程结束的影响,通过代码示例说明setDaemon(True)的正确使用时机及注意事项,帮助开发者避免线程挂起或意外终止的问题。

Python threading模块基础用法与守护线程详解

在多线程编程中,参数传递有着严格的格式要求。如果传入的参数不符合规范,程序将会报错。


import _thread as thread
import time
def loop1(in1):
  print("Start loop 1 at:", time.ctime())
print("我是参数", in1)
time.sleep(4)
print("End loop 1 at:", time.ctime())
def loop2(in1, in2):
  print("Start loop 2 at:", time.ctime())
print("我是参数", in1, "和参数 ", in2)
time.sleep(4)
print("End loop 1 at:", time.ctime())
def main():
  print("Starting at:", time.ctime())
thread.start_new_thread(loop1, ("liuming", ))
# 上面我们传参的时候, 我用的是:(“ liuming”), 这里面是没有逗号的, 结果编译报错, 告诉我, 这里面必须传入元组
# 因此, 我才在里面加了一个逗号, 使其变成一个元组
thread.start_new_thread(loop2, ("zhanglei", "liuhao"))
print("All done at:", time.ctime())
if __name__ == "__main__":
  main()
while True:
  time.sleep(10)
​

threading模块的核心用法

threading模块的核心用法

最直接的方式是通过threading.Thread类来创建线程实例。

其基本语法格式如下:

t = threading.Thread(target=函数体, args=(参数1, 参数2, ...)),其中args参数必须接收一个元组。

调用t.start()方法即可启动多线程。

调用t.join()方法可以阻塞当前线程,直到该子线程执行完毕。


def main():
  print("Start at :", time.ctime())
t1 = threading.Thread(target = loop1, args = ("王老大", ))
t1.start()# 启动多线程
t2 = threading.Thread(target = loop2, args = ("孙子", "好吗"))
t2.start()
t1.join()
t2.join()
print("End at :", time.ctime())
if __name__ == "__main__":
  main()

通过上述代码可以看出,虽然启动了两个子线程,但主程序会等待所有子线程执行完毕后,才会打印最后的“结束”语句。

守护线程的设置与注意事项

2. 守护线程(Daemon Thread)

设置语法为:线程实例.setDaemon(True)。

其主要作用包括:

(1)若将子线程设置为守护线程,当主线程结束时,该子线程会自动退出;

(2)通常认为守护线程并不重要,或者不允许其脱离主线程独立运行;

(3)守护线程的行为表现可能与具体的运行环境有关。

注意事项:setDaemon(True)语句必须写在start()方法之前,否则可能导致子线程被无限期挂起并引发运行报错。


def fun():
  print("Start fun")
time.sleep(2)
print("End fun")
​print('Main thread')
t3 = threading.Thread(target = fun, args = ())
t3.setDaemon(True)
t3.start()
time.sleep(1)
print("Main thread End")

从执行结果可以看出,主线程结束后(即打印完“Main thread End”),子线程的最后一次打印并未输出,程序随即结束。这说明当主线程终止时,无论子线程执行到哪一步,都会被强制终止(kill),这符合我们的预期设定。

三、完整源代码

文件名为:d24_2_usage_of_threading.py

代码托管地址:https://github.com/ruigege66/Python_learning/blob/master/d24_2_usage_of_threading.py

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表