python 多執行緒的實現

2022-09-04 22:51:19 字數 2746 閱讀 8427

併發:多個任務同一時間段進行

並行:多個任務同一時刻進行

執行緒模組

python通過兩個標準庫_thread 和threading,提供對執行緒的支援 , threading對_thread進行了封裝

因此在實際的使用中我們一般都是使用threading,threading模組中提供了thread , lock , rlock ,

condition等元件

thread類

常用引數

target   表示呼叫物件,即子執行緒要執行的任務

name   子執行緒的名稱

args    傳入target函式中的位置引數,是乙個元組,引數後必須加逗號隔開

常用例項方法

thread.run (self)        執行緒啟動時執行的方法,由該方法呼叫target引數所指定的函式

thread.start (self)       啟動程序,start方法就是去幫你呼叫run方法

thread.terminate (self)      強制終止執行緒

thread.join (self, timeout=none)   阻塞呼叫,主線程進行等待

thread.setdaemon (self,daemonic) 將子執行緒設定為守護執行緒

thread.getname(self,name)  獲取執行緒名稱

thread.setname (self,name )  設定執行緒名稱

建立執行緒

例項thread類

繼承thread類

主線程 : 當乙個程式啟動時 , 就有乙個執行緒開始執行 , 該執行緒通常叫做程式的主線程

子執行緒 : 因為程式是開始時就執行的 , 如果你需要再建立執行緒 , 那麼建立的執行緒就是這個主線程的子執行緒

主線程的重要性體現在兩方面 :

是產生其他子執行緒的執行緒

通常它必須最後完成執行比如執行各種關閉操作

join : 阻塞呼叫程式 , 直到呼叫join () 方法的執行緒執行結束, 才會繼續往下執行

setdaemon() 與 join() 基本上是相對的 , join會等子執行緒執行完畢 ; 而setdaemon則不會等,主線程結束,則全部結束

執行緒通訊

鎖在多執行緒中 , 所有變數對於所有執行緒都是共享的

因此 , 執行緒之間共享資料最大的危險在於多個執行緒同時修改乙個變數 , 那就亂套了

所以我們需要互斥鎖 , 來鎖住資料

執行緒間全域性變數的共享

因為執行緒屬於同乙個程序,因此它們之間共享記憶體區域,所以全域性變數是公共的

共享記憶體間存在競爭問題

在這裡進行原子操作(取值、運算、賦值)的時候切換到了其它執行緒,乙個執行緒還沒賦值,另外的執行緒就已經給它賦值了,然後又切回來繼續賦值

使用鎖來控制共享資源的訪問

加鎖:lock物件.acquire()

解鎖:lock物件.release()

佇列的基本概念

乙個入口,乙個出口,先入先出(fifo)

執行緒安全佇列、操作一覽

入隊: put(item)

出隊: get()

測試空: empty()

測試滿: full()

佇列長度: qsize()

任務結束: task_done()

等待完成: join()

執行緒池池的概念

主線程:相當於生產者,只管向執行緒池提交任務,並不關心執行緒池是如何執行任務的,因此,也不關心是哪乙個執行緒執行的這個任務

執行緒池:相當於消費者,負責接收任務,並將任務分配到乙個空閒的執行緒中去執行

執行緒池的簡單實現

python內建執行緒池

池的其他操作

操作一: close - 關閉提交通道,不允許再提交任務

操作二: terminate - 中止程序池,中止所有任務

python多執行緒實現

資料夾命名不能用官方已有的模組名比如threading.py test.py等等都會報錯 from multiprocessing import process import os 子程序要執行的 def run proc name print run child process s s name,...

python多執行緒實現

coding utf 8 import threading 匯入執行緒模組 from time import ctime,sleep 建立執行緒事件 defeat print 我在吃東西 s ctime 執行緒組 threads 建立執行緒數量 for x in range 10 t1 thread...

python多執行緒執行緒池實現

在python中多執行緒可以使用threading來實現,但實際使用時考慮效能等,大多會使用到執行緒池,下面就是基於python2和python3來說明下執行緒池的使用。import time def testthread fl time.sleep 1 print print fl return ...