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) # 回撥函式