1. 程式人生 > >併發 --- 31 程序鎖 守護程序 程序佇列

併發 --- 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進去的數量相同時,才繼續執行

生產者消費者模型: