python多執行緒

2022-09-15 07:30:08 字數 2392 閱讀 4684

例項一:

#

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

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

for i in

threads:i.join()

print

"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個鎖中的任意乙個

print

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分鐘。多執行緒的情況下,程式就會同時進行多個任務,雖然在同一時刻也只能執行某個任...