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

 

threading是對thread的封裝。web

一、開啓線程:多線程

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

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

 

二、主進程下開啓子進程:函數

    t=multiprocessing.Process(target=work)
    t.start()

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

 

三、t.setDadmon() 設置守護進程;必須在start()以前設置;若是爲True則主程序不用等此線程結束後再結束主程序;spa

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線程

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

 

四、同步鎖對象

R=threading.Lock()
R.acquire()
'''
對公共數據的操做
'''
R.release()

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

 

五、死鎖

使用RLock()代替Lock()可解決,由於RLock()使資源能夠被屢次acquire,但只有直到一個線程全部的acquire都被release以後其餘線程才能得到資源。

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

 

六、Event對象

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

Event對象方法:

1 isSet()          返回event的狀態值;
2 wait()           若是event.isSet() == False 將阻塞線程,即等待;
3 set()          設置event的狀態值;
4 clear()          恢復event的狀態值爲False; 

七、線程queue

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

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

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

相關文章
相關標籤/搜索