併發 --- 31 程序鎖 守護程序 程序佇列
一。程序的其他方法
1. .name 程序名 (可指定)
2. .pid 程序號
3. os.getpid 在什麼位置就是什麼的程序號
4. .is_alive() 判斷子程序是否還活著
5. .terminate() 給作業系統發出結束程序的訊號
二 。程序之間是物理隔離的
三. 守護程序
.daemon = True 設定成為守護程序
必須寫在 start 之前
跟著主程序的結束而結束
四。殭屍程序和孤兒程序
1.殭屍程序(有害):一個程序使用fork建立子程序,如果子程序退出,
而父程序並沒有呼叫wait或waitpid獲取子程序的狀態資訊,
那麼子程序的程序描述符仍然儲存在系統中。這種程序稱之為僵死程序
2.孤兒程序(無害):一個父程序退出,而它的一個或多個子程序還在執行,
那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,
並由init程序對它們完成狀態收集工作
五.程序鎖/互斥鎖/同步鎖 鎖名 = Lock()
1. 鎖名.acquire()
鎖住部分(序列)
鎖名.release()
2. with 鎖名
鎖住部分
搶票例項:
六.資料共享 Manager
七.程序佇列 (先進先出) 佇列名 = Queue (佇列長度)
1. .put () 放值
2. .get() 取值
3. 防止阻塞 (try ...except)
超出時 .put_nowait()
取空時 .get_nowait()
4. .qsize() 當前佇列有多少資料
5. .full() 是否滿了 (Ture/False) 不可靠
6. .empty() 是否空了 (Ture/False) 不可靠
生產者消費者模型:
八. Joinablequeue模型 佇列有返回
佇列名 = Joinablequeue(佇列長度)
佇列名.task_done() #給佇列傳送一個取出的這個任務已經處理完畢的訊號
佇列名.join() #就等著task_done()訊號的數量,
和我put進去的數量相同時,才繼續執行
生產者消費者模型: