Python 中的守護執行緒
Manav Narula
2023年1月30日
執行緒是要處理的一小段指令序列,我們可以讓不同的執行緒同時執行以提高效率。我們有守護執行緒和非守護執行緒。
本教程將討論 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 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