本文以實(shí)例形式較為詳細(xì)的講述了Python中多線程的用法,在Python程序設(shè)計(jì)中有著比較廣泛的應(yīng)用。分享給大家供大家參考之用。具體分析如下:
python中關(guān)于多線程的操作可以使用thread和threading模塊來(lái)實(shí)現(xiàn),其中thread模塊在Py3中已經(jīng)改名為_thread,不再推薦使用。而threading模塊是在thread之上進(jìn)行了封裝,也是推薦使用的多線程模塊,本文主要基于threading模塊進(jìn)行介紹。在某些版本中thread模塊可能不存在,要使用dump_threading來(lái)代替threading模塊。
一、線程創(chuàng)建
threading模塊中每個(gè)線程都是一個(gè)Thread對(duì)象,創(chuàng)建一個(gè)線程有兩種方式,一種是將函數(shù)傳遞到Thread對(duì)象中執(zhí)行,另一種是從Thread繼承,然后重寫run方法(是不是跟Java很像)。
下面使用這兩種方法分別創(chuàng)建一個(gè)線程并同時(shí)執(zhí)行
import random, threadingdef threadFunction(): for i in range(10): print 'ThreadFuction - %d'%i time.sleep(random.randrange(0,2))class ThreadClass(threading.Thread): def __init__(self): threading.Thread.__init__(self); def run(self): for i in range(10): print 'ThreadClass - %d'%i time.sleep(random.randrange(0,2))if __name__ == '__main__': tFunc = threading.Thread(target = threadFunction); tCls = ThreadClass() tFunc.start() tCls.start()
執(zhí)行結(jié)果如下,可以看到兩個(gè)線程在交替打印。至于空行和一行多個(gè)輸出,是因?yàn)镻y的print并不是線程安全的,在當(dāng)前線程的print打印了部分內(nèi)容后,準(zhǔn)備打印換行之前,被別的線程中的print搶先,在換行之前打印了其它的內(nèi)容。
ThreadFuction - 0ThreadFuction - 1ThreadFuction - 2ThreadClass - 0ThreadFuction - 3ThreadClass - 1ThreadFuction - 4ThreadClass - 2ThreadClass - 3ThreadClass - 4ThreadFuction - 5ThreadClass - 5ThreadClass - 6ThreadClass - 7ThreadClass - 8ThreadFuction - 6ThreadClass - 9ThreadFuction - 7ThreadFuction - 8ThreadFuction - 9
Thread類的構(gòu)造函數(shù)定義如下
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
group: 留作ThreadGroup擴(kuò)展使用,一般沒什么用
target:新線程的任務(wù)函數(shù)名
name: 線程名,一般也沒什么用
args: tuple參數(shù)
kwargs:dictionary參數(shù)
Thread類的成員變量和函數(shù)如下
start() 啟動(dòng)一個(gè)線程
run() 線程執(zhí)行體,也是一般要重寫的內(nèi)容
join([timeout]) 等待線程結(jié)束
name 線程名
ident 線程ID
daemon 是否守護(hù)線程
isAlive()、is_alive() 線程是否存活
新聞熱點(diǎn)
疑難解答
圖片精選