1. 程式人生 > >Python3 多線程編程(thread、threading模塊)

Python3 多線程編程(thread、threading模塊)

live() true 主程序 enume ket 封裝 多次 線程變量 數據的操作

threading是對thread的封裝。

1、開啟線程:

t=threading.Thread(target=sayhi,args=(‘hh‘,))

t.start()

或者先建一個Thread的繼承類,然後用這個類中的start()方法打開;

2、主進程下開啟子進程:

t=multiprocessing.Process(target=work)

t.start()

程序會先執行主程序的語句,再執行此子進程的目標函數work();

3、t.setDadmon() 設置守護進程;必須在start()之前設置;如果為True則主程序不用等此線程結束後再結束主程序;

t.join() 等待線程結束;

t.isAlive() 返回線程是否活動;

t.getName() 返回線程名。

t.setName() 設置線程名。

threading.currentThread() 返回當前線程變量;

threading.enumerate() 返回一個包含正在運行線程的列表;

threading.activeCount() 返回正在運行的線程數量;

threading.Semaphore(5) 限制最大連接數為5,semaphore是一個acquire,release的計數器;

多線程用於IO密集型,如socket,爬蟲,web

多進程用於計算密集型,如金融分析

4、同步鎖

R=threading.Lock()

R.acquire()

‘‘‘

對公共數據的操作

‘‘‘

R.release()

用於對共享資源同步訪問的限制,只有當一個線程訪問完畢後另一個線程才能訪問。

5、死鎖

使用RLock()代替Lock()可解決,因為RLock()使資源可以被多次acquire,但只有直到一個線程所有的acquire都被release之後其他線程才能獲得資源。

而使用Semaphore(n)則可限制資源的同時最大可訪問線程數;

6、Event對象

用於多線程之間的通信和同步,初始情況下event對象中信號標誌為False;

Event對象方法:

isSet() 返回event的狀態值;

wait() 如果event.isSet() == False 將阻塞線程,即等待;

set() 設置event的狀態值;

clear() 恢復event的狀態值為False;

7、線程queue

實例queue.Queue() 先進先出;

實例queue.LifoQueue() 後進先出;

實例queue.PriorityQueeu() 接受一個優先級參數,根據優先級大小決定順序;

Python3 多線程編程(thread、threading模塊)