Python 中的守护线程
Manav Narula
2023年1月30日
2022年5月17日
线程是要处理的一小段指令序列,我们可以让不同的线程同时运行以提高效率。我们有守护线程和非守护线程。
本教程将讨论 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
Author: Manav Narula
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