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

2021-10-02 00:27:22 字數 2376 閱讀 5225

1、守護程序:

1.1、什麼是守護程序?

1)、守護程序會在主程序**執行結束的情況下,立即結束。

2)、守護程序本身其實就是乙個子程序。

3)、主程序在其**結束後已經執行完畢(守護程序在此時就被**),然後主程序會一直等非守護的子程序都執行完畢後**子程序的資源才會結束。

1.2、為什麼要用守護程序?

1)、守護程序本身就是乙個子程序,所以在主程序需要將任務併發執行的時候需要開啟子程序。

2)、當該子程序執行的任務生命週期伴隨著主程序的生命週期時,就需要將該子程序做成守護程序。

2、守護執行緒(threading模組提供setdaemon(true)來使子執行緒變為守護執行緒)

1、守護執行緒會在"該程序內所有非守護執行緒全部都執行完畢後,守護執行緒才會結束"。不是主線程執行完畢後守護執行緒結束。(與守護程序的區別)

2、守護執行緒守護的是:當前程序內所有的子執行緒!

3、主線程在其他非守護執行緒執行完畢後才算執行完畢(守護執行緒在此時就被**)。因為主線程的結束意味著程序的結束,程序整體的資源都將被**,而程序必須保證非守護執行緒都執行完畢後才能結束。

守護執行緒和守護程序的區別:

守護程序是等待主程序**結束之後就結束

守護執行緒是等待主線程都結束之後才結束

主線程等待其他執行緒結束,才結束

3、執行緒鎖:

import threading

import time

defrun

(n):

lock.acquire(

)#鎖定

# print("task:",n)

global num

num+=

1# time.sleep(2)

# print("task done:",n)

lock.release(

)#釋放鎖

lock=threading.lock(

)#建立鎖

num=

0t_obj=

for i in

range(50

):t=threading.thread(target=run,args=

("t-%s"

% i,))

t.start(

)for i in t_obj:

i.join(

)time.sleep(2)

print

("---all thread has finished"

)print

("num:"

,num)

4、程序鎖:

# 例如:螢幕共享的時候,多程序可以同時使用螢幕,程序加鎖的目的在於,確保螢幕被獨個程序使用。

from multiprocessing import lock,process

defrun

(l,i)

: l.acquire(

)print

(i) l.release(

)if __name__==

"__main__"

: lock=lock(

)for num in

range

(100):

process(target=run,args=

(lock,num)

).start(

)

5、協程:

generator函式

generator函式的作用是一次產生乙個資料項,並把資料輸出,迭代效能更加

說明:generator函式的定義與普通函式的區別只是在函式體內使用yield生成資料項。generator函式可以被for迴圈遍歷,且可以通過__next__(

)方法獲得yield生成的資料項。

格式:def 函式名(引數列表):

……yield表示式

迭代器物件:是乙個「惰性物件」,通過呼叫它自身的__next__(

)方法或者next

()系統函式獲得迭代器中的下乙個元素。

實現了__iter__(

)和__next__(

)方法的物件都是迭代器

使用iter

()系統函式可以將乙個可迭代物件轉換成迭代器物件

可迭代物件:能被for迴圈遍歷的物件

迭代器:既能被for迴圈遍歷,還可以通過呼叫next

()系統函式獲取下乙個元素,或者呼叫迭代器本身的__next__(

)方法

python 守護程序執行緒,join

1.程序 守護程序隨著主程序的 結束而結束,注意是 主程序可能在等待其他的子程序 from multiprocessing import process def func while true time.sleep 0.2 print ok if name main p process target...

守護程序VS守護執行緒

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

守護執行緒和守護程序

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