Python 中的守护线程

Manav Narula 2023年1月30日
  1. 在 Python 中设置 daemon 参数以创建守护线程
  2. 在 Python 中使用 setDaemon() 函数将线程更改为守护线程
Python 中的守护线程

线程是要处理的一小段指令序列,我们可以让不同的线程同时运行以提高效率。我们有守护线程和非守护线程。

本教程将讨论 Python 中的守护线程。

在 Python 中设置 daemon 参数以创建守护线程

支持非守护线程和主线程的线程称为守护线程。它们不会阻止主线程退出。非守护线程也可以在主线程执行后执行,但守护线程停止执行与主线程。

这就是为什么守护线程可以很好地支持主线程和非守护线程的原因。我们使用守护线程来执行垃圾收集等基本功能,当主程序终止时,无论进程是否完成,垃圾收集都会停止。

为了创建一个守护线程,我们将 threading.Thread() 函数的 daemon 参数设置为 True

例如:

import threading
import time


def thread_x():
    print("Start ", threading.currentThread().name)
    time.sleep(5)
    print("Finish ", threading.currentThread().name)


def thread_y():
    print("Start ", threading.currentThread().name)
    print("Finish ", threading.currentThread().name)


x = threading.Thread(target=thread_x, name="Thread-X", daemon=True)
y = threading.Thread(target=thread_y, name="Thread-Y")


x.start()
y.start()

输出:

Start  Thread-X
Start  Thread-Y
Finish  Thread-Y

在这个例子中,我们可以观察到线程 x,一个守护线程,当非守护线程 y 停止执行并且程序终止时停止执行。

在 Python 中使用 setDaemon() 函数将线程更改为守护线程

我们还可以使用 setDaemon() 函数来更改线程并使其成为守护线程。我们需要将此函数作为参数传递 True

如果线程是守护线程,isDaemon() 函数将返回 True;否则,它将返回 false

我们现在将在以下示例中使用这些方法。

import threading
import time


def thread_x():
    print("Start ", threading.currentThread().name)
    time.sleep(5)
    print("Finish ", threading.currentThread().name)


def thread_y():
    print("Start ", threading.currentThread().name)
    print("Finish ", threading.currentThread().name)


x = threading.Thread(target=thread_x, name="Thread-X")
y = threading.Thread(target=thread_y, name="Thread-Y")

x.setDaemon(True)
print(x.isDaemon())
print(y.isDaemon())

x.start()
y.start()

输出:

True
False
Start  Thread-X
Start  Thread-Y
Finish  Thread-Y
作者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

相关文章 - Python Thread