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


 

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() 接受一個優先級參數,根據優先級大小決定順序;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM