Python學習隨筆(九)

2021-10-10 06:10:00 字數 2789 閱讀 8836

多執行緒

執行緒:是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

python學習隨筆

初始學習 菜雞乙個 1 用python提取excel資料 data pd.read excel r c users limaoli desktop ybsj.xlsx 這加了乙個r data np.array data 把列表轉換為陣列,方便後面的提取 datamat data 0 3 這個提取的是...

Python 學習隨筆

1.20200421 print輸入respone不能換行的問題 import urllib.parse import urllib.request data bytes urllib.parse.urlencode encoding utf8 respone urllib.request.urlo...

Python 學習隨筆

number 5 def test1 嘗試修改全域性變數值為10 在python中,是不允許直接修改全域性變數的值,如果使用賦值語句,結果是會在函式內部新定義乙個區域性變數 number 10 print test1 d number def test2 print test2 d number t...