Python3 多執行緒程式設計(thread、threading模組)

覆手為雲p發表於2017-07-17

 

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則主程式不用等此執行緒結束後再結束主程式;

1 t.join()                 等待執行緒結束;
2 t.isAlive()              返回執行緒是否活動;
3 t.getName()               返回執行緒名。
4 t.setName()               設定執行緒名。
5 threading.currentThread()    返回當前執行緒變數;
6 threading.enumerate()        返回一個包含正在執行執行緒的列表;
7 threading.activeCount()      返回正在執行的執行緒數量;
8 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物件方法:

1 isSet()          返回event的狀態值;
2 wait()           如果event.isSet() == False 將阻塞執行緒,即等待;
3 set()          設定event的狀態值;
4 clear()          恢復event的狀態值為False; 

7、執行緒queue

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

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

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

相關文章