python—多线程定义和创建(一)
一、線程的理解
線程是"輕量級(jí)""的,一個(gè)進(jìn)程中的線程使用同樣的地址空間,且共享許多資源。啟動(dòng)線程的時(shí)間遠(yuǎn)遠(yuǎn)小于啟動(dòng)進(jìn)程的時(shí)間和空間,而且,線程間的切換也要比進(jìn)程間的切換快得多。由于使用同樣的地址空間,所以線程之間的數(shù)據(jù)通信比較方便,一個(gè)進(jìn)程下的線程之間可以直接使用彼此的數(shù)據(jù)。當(dāng)然,這種方便性也會(huì)帶來(lái)一些問(wèn)題,特別是同步問(wèn)題。。
多線程對(duì)于那些I/O受限的程序特別適用。
二、線程分類(lèi):
內(nèi)核線程:由操作系統(tǒng)內(nèi)核創(chuàng)建和撤銷(xiāo)。
用戶線程:不需要內(nèi)核支持而在用戶程序中實(shí)現(xiàn)的線程。
三、線程的生命周期
一個(gè)線程在其生命周期內(nèi),會(huì)在不同的狀態(tài)之間轉(zhuǎn)換。在任何一個(gè)時(shí)刻,線程總是處于某種線程狀態(tài)中。雖然不同的操作系統(tǒng)可以實(shí)現(xiàn)不同的線程模型,定義不同的線程狀態(tài),但是總的說(shuō)來(lái),一個(gè)線程模型中下面幾種狀態(tài)是通用的。
1、線程的創(chuàng)建:t=threading.Thread()
2、就緒狀態(tài):已經(jīng)獲得了除CPU之外的其他資源,正在參與調(diào)度,等待被執(zhí)行,當(dāng)調(diào)度完成之后,立即運(yùn)行
3、啟動(dòng)狀態(tài):獲得了CPU時(shí)間片段,正在運(yùn)行
4、等待\阻塞狀態(tài):遇到time.sleep()時(shí),會(huì)阻塞,暫時(shí)不參與調(diào)度,等待事件發(fā)生
5、中止?fàn)顟B(tài):線程運(yùn)行結(jié)束,run函數(shù)運(yùn)行結(jié)束,等待系統(tǒng)回收其線程資源。
四、函數(shù)創(chuàng)建線程
執(zhí)行結(jié)果:
四、類(lèi)創(chuàng)建線程
t=MyThread(name=s[i]) 創(chuàng)建線程,里面的參數(shù)代表線程的名字,如果不傳,系統(tǒng)會(huì)默認(rèn)有一個(gè)名字
五、多線程之得到線程的數(shù)量
執(zhí)行結(jié)果
count=len(threading.enumerate()) 獲得當(dāng)前運(yùn)行的線程的數(shù)量
為什么線程一開(kāi)始為6呢?
5個(gè)子線程+1個(gè)主線程
總結(jié)
以上是生活随笔為你收集整理的python—多线程定义和创建(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python—多线程之守护线程
- 下一篇: python—多线程之数据混乱问题