python執行緒陣列 python多執行緒

2021-10-11 12:45:29 字數 1924 閱讀 2523

例項一:

#coding=utf-8#匯入threading模組,在thread上有優化

importthreadingfrom time importctimeimporttime

count=0deftest(func):globalcount

time.sleep(1)#測試鎖

if lock.acquire(1):

count+= 1

print "thread: %s. %s" %(func,ctime())print '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()

建立執行緒,使用threading.thread()方法,呼叫方法target=test,args方法對test傳參。建立好的執行緒裝載到threads陣列中。

執行緒物件有兩個用來管理執行緒機制的方法: setdaemon 和 join

主線程啟動若干個子執行緒後,如果需要等待所有的子執行緒執行完畢後繼續執行主線程,這裡需要用到的就是 join 方法,如果沒有為子執行緒註冊 join,則可能會出現在主線程執行完畢之前,還有很多子執行緒沒有執行完畢,這時如果你為子執行緒註冊了 setdaemon(true) 的話,主線程會**此子執行緒;否則,主線程自己結束,子執行緒依舊在那執行。預設是 false,也就說主線程不會**子執行緒。

setdaemon() : 設定此執行緒是否被主線程守護**。預設false不**,需要在 start 方法前呼叫;設為true相當於像主線程中註冊守護,主線程結束時會將其一並**。

join(): 設定主線程是否同步阻塞自己來待此執行緒執行完畢。如果不設定的話則主程序會繼續執行自己的,在結束時根據 setdaemon 有無註冊為守護模式的子程序,有的話將其**,沒有的話就結束自己,某些子執行緒可以仍在執行。

例項二:

#coding : uft-8

importthreading, timeclass 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個鎖中的任意乙個

printn , 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()

t.start()for t inthreadlist:

t.join()

python執行緒陣列 python 執行緒使用

執行緒演示指令碼 coding utf 8 import threading from time import ctime,sleep def music func for i in range 2 print i was listening to s.s func,ctime sleep 1 de...

莫煩pytho學習之多執行緒

多執行緒是什麼呢?多執行緒是加速程式計算的有效方式,python的多執行緒模組threading上手快速簡單 新增執行緒 import threading defadding thread print this is new thread s threading.current thread def...

leetcode 189 旋轉陣列 python

題目官網上有,直接上思路 k右旋,即讓右邊後k個數依次放入前面數。思路一 直接刪除後k個,然後依次作為首項加入 class solution def rotate self,nums list int k int none for in range k len nums nums.insert 0,...