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