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)
("---all thread has finished"
("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...