python 守護程序執行緒,join

2022-06-07 06:48:09 字數 1606 閱讀 8079

1.程序

守護程序隨著主程序的**結束而結束,注意是**,主程序可能在等待其他的子程序

from multiprocessing import process

def func():

while true:

time.sleep(0.2)

print('ok')

if __name=='__main__':

p = process(target=func)

p.daemon =true #start前設定,在主程序結束後就會結束

p.start

2.執行緒

守護執行緒在主線程之後等待其他子執行緒結束後才結束,和程序是有區別的,原因就是程序結束資源**的原因

在指令碼執行過程中有乙個主線程,若在主線程中建立了子執行緒,當主線程結束時根據子執行緒daemon屬性值的不同可能會發生下面的兩種情況之一:

如果某個子執行緒的daemon屬性為false,主線程結束時會檢測該子執行緒是否結束,如果該子執行緒還在執行,則主線程會等待它完成後再退出;

如果某個子執行緒的daemon屬性為true,主線程執行結束時不對這個子執行緒進行檢查而直接退出,同時所有daemon值為true的子執行緒將隨主線程一起結束,而不論是否執行完成。

屬性daemon的值預設為false,如果需要修改,必須在呼叫start()方法啟動執行緒之前進行設定。另外要注意的是,上面的描述並不適用於idle環境中的互動模式或指令碼執行模式,因為在該環境中的主線程只有在退出python idle時才終止。

import threading

import time

#繼承thread類,建立自定義執行緒類

class mythread(threading.thread):

def __init__(self, num, threadname):

threading.thread.__init__(self, name=threadname)

self.num = num

#重寫run()方法

def run(self):

time.sleep(self.num)

print(self.num)

#建立自定義執行緒類物件,daemon預設為false

t1 = mythread(1, 't1')

t2 = mythread(5, 't2')

#設定執行緒物件t2的daemon屬性為true

t2.daemon = true

print(t1.daemon)

print(t2.daemon)

#啟動執行緒

t1.start()

t2.start() # 在命令提示符環境中執行該程式時,執行緒t2沒有執行結束就跟隨主線程一同結束了,因此並沒有輸出數字5。

3.join,感知程序結束,將非同步的程序變成同步,記憶相當於把子程序的** join()到main函式中間

1.

day37

2.前面的p程序都start了,join保證都能執行完成再執行下面的語句

[p.join() for p in p_list]

print('執行完了')

python執行緒鎖 守護執行緒,程序鎖 守護程序

1 守護程序 1.1 什麼是守護程序?1 守護程序會在主程序 執行結束的情況下,立即結束。2 守護程序本身其實就是乙個子程序。3 主程序在其 結束後已經執行完畢 守護程序在此時就被 然後主程序會一直等非守護的子程序都執行完畢後 子程序的資源才會結束。1.2 為什麼要用守護程序?1 守護程序本身就是乙...

守護程序VS守護執行緒

join 方法可以使乙個程序執行完之後再執行下乙個程序,而daemon 方法就是主程序的 執行完畢之後,不需要等待子程序,立即終止子程序。join 方法和daemon 方法都是改變程序順序的方法。1.daemon 方法要寫在start 方法之前。2.子程序被設定成守護程序後,一旦主程序 執行完畢,不...

守護執行緒和守護程序

守護程序隨著主程序的 的執行結束而結束 守護執行緒會在主線程結束之後等待其他子執行緒的結束才結束 如有其他子執行緒,沒有其他子執行緒就是主線程結束守護執行緒隨之結束 主程序在執行玩完自己的 後不會立即結束,而是等待子程序結束之後,子程序的資源 import time from threading i...