1. 程式人生 > >day 34 GIL鎖,執行緒佇列,執行緒池及執行緒池回撥函式

day 34 GIL鎖,執行緒佇列,執行緒池及執行緒池回撥函式

一 . GIL鎖

  GIL鎖是python程式碼轉直譯器程式碼的一個鎖

  

 

   雖然我們加鎖的原因是因為要保護安全性從而降低了效率,但是加鎖也會出現安全性的問題!

  

  

 

二 . 執行緒佇列

  import queue

  三種佇列形式

  1 . class queue.(maxsize = 0)    # 先進先出

  2 . class queue.LifoQueue(maxsize = 0)  #先進後出,後進先出

  3 . class queue.PriotityQueue(maxsize = 0)   #優先順序佇列,引數是:元祖(1,‘ 2 ’)  1是優先順序,  ‘ 2 ’是資料

  這三種佇列都是執行緒安全的,不會出現多個執行緒搶佔同一個資源或資料的情況。

三 . 執行緒池基本方法及回撥函式

  ProcessPoolExecutor  :執行緒池的匯入模組,提供非同步呼叫

  回顧下程序池:ThreadPoolExecutor    程序池的匯入模組,提供非同步呼叫

  from  concurrent.futures  import  ThreadPoolExecutor,ProcePoolExecutor

  from   multiprocessing   import   pool    (模組匯入有點長,需要記一下)

  執行緒池的基本方法:

  1 . submit(fn,*args,**kwargs)   #   非同步提交任務

  2 . map(func,*iterables,timeout=None,chunksize = 1)    #  對映,取代for 迴圈submit 的操作

  3 . shutdown    #(wait = True)  相當於程序吃的pool.close( )+pool.join( ) 操作

  4 . result(timeout = None)    # 取得結果

  5 . add_done_callback(fn)    #  回撥函式