例項一:
#coding=utf-8
#匯入threading模組,在thread上有優化
import
threading
from time import
ctime
import
time
count =0
deftest(func):
global
count
time.sleep(1)#
測試鎖if lock.acquire(1):
count += 1
"thread: %s. %s
" %(func,ctime())
'num:%s.%s
'%(count,ctime())
lock.release()
##or
#with lock:
#count += 1
#print "thread: %s. %s" %(func,ctime())
#print 'num:%s.%s'%(count,ctime())
if__name__ == '
__main__':
lock =threading.lock()
#建立threads陣列
threads =
#建立10個執行緒
for i in range(10):
t = threading.thread(target=test,args=(i,))
t.setdaemon(true)
#開啟執行緒
t.start()
for i in
threads:i.join()
"all over %s
" %ctime()
建立執行緒,使用threading.thread()方法,呼叫方法target=test,args方法對test傳參。建立好的執行緒裝載到threads陣列中。
執行緒物件有兩個用來管理執行緒機制的方法: setdaemon 和 join
主線程啟動若干個子執行緒後,如果需要等待所有的子執行緒執行完畢後繼續執行主線程,這裡需要用到的就是 join 方法,如果沒有為子執行緒註冊 join,則可能會出現在主線程執行完畢之前,還有很多子執行緒沒有執行完畢,這時如果你為子執行緒註冊了 setdaemon(true) 的話,主線程會**此子執行緒;否則,主線程自己結束,子執行緒依舊在那執行。預設是 false,也就說主線程不會**子執行緒。
setdaemon() : 設定此執行緒是否被主線程守護**。預設false不**,需要在 start 方法前呼叫;設為true相當於像主線程中註冊守護,主線程結束時會將其一並**。
join(): 設定主線程是否同步阻塞自己來待此執行緒執行完畢。如果不設定的話則主程序會繼續執行自己的,在結束時根據 setdaemon 有無註冊為守護模式的子程序,有的話將其**,沒有的話就結束自己,某些子執行緒可以仍在執行。
例項二:
#coding : uft-8
import
threading, time
class mythread(threading.thread):#
使用類定義thread,繼承threading.thread
def__init__
(self):
threading.thread.
__init__
(self)
def run(self):#
run函式必須實現
global n, lock #
多執行緒是共享資源的,使用全域性變數
time.sleep(1)
if lock.acquire():#
當需要獨佔n資源時,必須先鎖定,這個鎖可以是任意的乙個鎖,可以使用上邊定義的3個鎖中的任意乙個
n , self.name
n += 1lock.release()
#使用完counter資源必須要將這個鎖開啟,讓其他執行緒使用if"
__main__
" == __name__
: n = 1threadlist =
lock = threading.lock()#
只是定義乙個鎖,並不是給資源加鎖,你可以定義多個鎖,像下兩行**,當你需要占用這個資源時,任何乙個鎖都可以鎖這個資源
lock1 =threading.lock()
for i in range(1, 200):
t =mythread()
for t in
threadlist:
t.start()
for t in
threadlist:
t.join()
python多執行緒 python多執行緒
通常來說,多程序適用於計算密集型任務,多執行緒適用於io密集型任務,如網路爬蟲。關於多執行緒和多程序的區別,請參考這個 下面將使用python標準庫的multiprocessing包來嘗試多執行緒的操作,在python中呼叫多執行緒要使用multiprocessing.dummy,如果是多程序則去掉...
python多執行緒詳解 Python多執行緒詳解
前言 由於最近的工作中一直需要用到python去處理資料,而在面對大量的資料時,python多執行緒的優勢就展現出來了。因而藉此機會,盡可能詳盡地來闡述python多執行緒。但對於其更底層的實現機制,在此不做深究,僅是對於之前的一知半解做個補充,也希望初學者能夠通過這篇文章,即便是照葫蘆畫瓢,也能夠...
python程式多執行緒 PYTHON多執行緒
在單執行緒的情況下,程式是逐條指令順序執行的。同一時間只做乙個任務,完成了乙個任務再進行下乙個任務。比如有5個人吃飯,單執行緒一次只允許乙個人吃,乙個人吃完了另乙個人才能接著吃,假如每個人吃飯都需要1分鐘,5個人就需要5分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...