Python學習隨筆(九)
Python學習隨筆(九)
直接看 參考
多執行緒
執行緒:是cpu最小排程單位,一個程式中至少有一個或者多個執行緒
import threading
t = threading.Thread(target=函式名, name=執行緒名, args=函式的引數元組,kwargs=函式的引數字典) 建立並初始化執行緒
t.start() 啟動執行緒
t.join() 阻塞函式,直到執行緒結束為止
t.getName() 返回執行緒名
t.setName() 設定執行緒名
t.setDaemon(False) 設定為後臺執行緒,預設是False,預設主執行緒會等待所有子執行緒結束之後才會結束,主執行緒結束意味著程式退出;如果設定為True,主執行緒則不會等待子執行緒,主執行緒結束,子執行緒自動結束
t.isAlive() 返回執行緒是否活動的
t.enumerate() 返回一個包含正在執行的執行緒的list
t.activeCount() 返回正在執行的執行緒數量,與len(threading.enumerate())有相同的結果;
執行緒互斥鎖Lock
import threading
mutex = threading.Lock() 建立互斥鎖
mutex.acquire() 鎖定資源
mutex.release() 釋放資源
互斥鎖Lock主要針對多個執行緒同時操作同一個資料,使用互斥鎖可以保證資料正常修改或者訪問。
執行緒事件Event
import threading
eEvent = threading.Event() 建立event事件
eEvent.set() 全域性內建標誌Flag,將標誌Flag 設定為 True,通知在等待狀態(wait)的執行緒恢復執行
eEvent.isSet() 獲取標誌Flag當前狀態,返回True 或者 False
eEvent.wait() 一旦呼叫,執行緒將會處於阻塞狀態,直到等待其他執行緒呼叫set()函式恢復執行
eEvent.clear() 將標誌設定為False
事件event中有一個全域性內建標誌Flag,值為 True 或者False。使用wait()函式的執行緒會處於阻塞狀態,此時Flag指為False,直到有其他執行緒呼叫set()函式讓全域性標誌Flag置為True,其阻塞的執行緒立刻恢復執行,還可以用isSet()函式檢查當前的Flag狀態.
事件Event主要用於喚醒正在阻塞等待狀態的執行緒。
執行緒定時器Timer
指定時間間隔後啟動執行緒
import threading
timer = threading.Timer(interval, function, args=None, kwargs=None)
interval — 定時器間隔,間隔多少秒之後啟動定時器任務(單位:秒);
function — 執行緒函式;
args — 執行緒引數,可以傳遞元組型別資料,預設為空(預設引數);
kwargs — 執行緒引數,可以傳遞字典型別資料,預設為空(預設引數);
執行緒訊號量semaphore
semaphore訊號量可以通過內建計數器來控制同時執行執行緒的數量,啟動執行緒(消耗訊號量)內建計數器會自動減一,執行緒結束(釋放訊號量)內建計數器會自動加一;內建計數器為零,啟動執行緒會阻塞,直到有本執行緒結束或者其他執行緒結束為止;
semaphore = threading.Semaphore(n) 新增一個計數器,最大併發執行緒數量n(最多同時執行n個執行緒)
semaphore.acquire() 消耗訊號量,內建計數器減一
semaphore.release() 釋放訊號量,內建計數器加一
執行緒障礙物件Barrier
barrier = threading.Barrier(parties, action=None, timeout=None)
parties — 執行緒計數器,記錄執行緒數量,也稱執行緒障礙數量;
action — 是一個可呼叫函式,當等待的執行緒到達了執行緒障礙數量parties,其中一個執行緒會首先呼叫action 對應函式,之後再執行執行緒自己內部的程式碼;
timeout — 預設的超時時間;
執行緒條件變數Condition
con = threading.Condition() 建立條件變數condition
con.acquire() 條件變數condition 執行緒上鎖
con.wait() 執行緒掛起(阻塞狀態)
con.notify(n) 喚醒正在等待(wait)的n個執行緒
con.notifyAll() — 如果wait狀態執行緒比較多,notifyAll的作用就是通知所有執行緒
con.release() 條件變數condition 執行緒釋放鎖
執行緒佇列
import queue
執行緒佇列Queue — FIFO(先進先出佇列),即哪個資料先存入,取資料的時候先取哪個資料
q = queue.Queue()
執行緒佇列LifoQueue — LIFO(先進後出佇列),即哪個資料最後存入的,取資料的時候先取
q=queue.LifoQueue()
執行緒佇列PriorityQueue — PriorityQueue(優先順序佇列),即存入資料時候加入一個優先順序,取資料的時候優先順序最高的取出
q = queue.PriorityQueue()
執行緒池ThreadPoolExecutor
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=n) 執行緒池中最多能同時執行的執行緒數目為n
task = executor.submit(func, args ) 使用非阻塞方式呼叫func,args為傳遞給func的引數列表
task.done() 判斷該任務是否結束
task.cancel() 取消提交的任務,如果任務已經線上程池中執行了,則不能取消
task.result() 獲取task的執行結果
as_completed(executor.submit(func, args )) 是一個生成器,一次取出所有任務的結果
executor.map((func, args) 保證任務的順序性
wait(all_task , return_when=ALL_COMPLETED 接收3個引數,等待的任務序列、超時時間以及等待條件。等待條件return_when預設為ALL_COMPLETED,表明要等待所有的任務都結束。等待條件可以設定為FIRST_COMPLETED,表示第一個任務完成就停止等待。
相關文章
- Python零基礎學習筆記(九)——隨機數Python筆記隨機
- Python-pptx學習隨筆Python
- typora,markdown學習隨筆
- 學習隨筆——表格——2020.11.12
- 【筆者感悟】筆者的學習感悟【九】
- ReactNative學習筆記九之TabNavigatorReact筆記
- HexMap學習筆記(九)——地形特徵筆記特徵
- 初學Node.js--學習隨筆Node.js
- Hive入門學習隨筆(二)Hive
- ES6學習筆記(九)【class】筆記
- Python學習筆記Python筆記
- 【學習筆記】python筆記Python
- 學習隨筆——GBK字符集——2020.11.4
- Java學習隨筆(函式式介面)Java函式
- JavaWeb學習筆記——第九天JavaWeb筆記
- 飛機的 PHP 學習筆記九:安全PHP筆記
- robot framework學習筆記之九-雜記Framework筆記
- hive學習筆記之九:基礎UDFHive筆記
- 機器學習 | 吳恩達機器學習第九周學習筆記機器學習吳恩達筆記
- 零基礎學習人工智慧—Python—Pytorch學習(九)人工智慧PythonPyTorch
- python學習筆記(1Python筆記
- Python學習筆記 - queuePython筆記
- Effective Python學習筆記Python筆記
- python——Matplotlib學習筆記Python筆記
- python學習筆記4Python筆記
- Python學習筆記 - asyncioPython筆記
- Python 學習筆記(一)Python筆記
- Python學習筆記 - aiohttpPython筆記AIHTTP
- python學習筆記(二)Python筆記
- Python學習筆記(2)Python筆記
- python——numpy學習筆記Python筆記
- Python學習筆記(三)Python筆記
- 隨機過程學習筆記——概論隨機筆記
- 開通個人學習隨筆記錄筆記
- iOS學習筆記49 Swift(九)訪問控制iOS筆記Swift
- Vue學習筆記(九):元件化程式設計Vue筆記元件化程式設計
- ES[7.6.x]學習筆記(九)搜尋筆記
- Python學習筆記|Python之程式Python筆記