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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。