最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python進(jìn)程和線程之多線程的使用及說明

 更新時(shí)間:2025年09月16日 09:02:18   作者:Derrick__1  
Python多線程通過threading模塊實(shí)現(xiàn),主線程默認(rèn)運(yùn)行,子線程由Thread類創(chuàng)建并啟動(dòng),線程共享變量易引發(fā)數(shù)據(jù)混亂,需用Lock同步,但鎖可能降低效率或?qū)е滤梨i,(79字)

Python之多線程的使用

前面提到過進(jìn)程是由很多線程組成的,那么今天廖老師就詳細(xì)解釋了線程是如何運(yùn)行的。

首先,Python的標(biāo)準(zhǔn)庫提供了兩個(gè)模塊:_threadthreading,_thread是低級模塊,threading是高級模塊,對_thread進(jìn)行了封裝。

絕大多數(shù)情況下,我們只需要使用threading這個(gè)高級模塊。

根據(jù)廖老師的例子,運(yùn)行出來如此的結(jié)果。

任何 Python 程序默認(rèn)都在一個(gè)主線程中運(yùn)行,該線程通常名為 MainThread

threading.current_thread().name用于獲取當(dāng)前正在執(zhí)行的線程的名稱。

t = threading.Thread(target=loop, name='LoopThread')   

這里使用 threading.Thread類來創(chuàng)建一個(gè)線程對象 ,也就是我們所需要的支線線程

start()方法會??啟動(dòng)新線程??

這意味著 Python 會創(chuàng)建新的執(zhí)行上下文,并??幾乎同時(shí)??開始在新線程中執(zhí)行 loop函數(shù)

重要的是,調(diào)用 start()后,主線程不會阻塞,它會繼續(xù)向下執(zhí)行(t.join()),而新線程 LoopThread也開始并發(fā)地執(zhí)行自己的任務(wù)。

不過由于多進(jìn)程中,同一個(gè)變量,各自有一份拷貝存在于每個(gè)進(jìn)程中,互不影響,而多線程中,所有變量都由所有線程共享,所以,任何一個(gè)變量都可以被任何一個(gè)線程修改,因此,線程之間共享數(shù)據(jù)最大的危險(xiǎn)在于多個(gè)線程同時(shí)改一個(gè)變量,把內(nèi)容給改亂了。

我們這里會引入一個(gè)lock語句

balance = 0
lock = threading.Lock()

def run_thread(n):
    for i in range(100000):
        # 先要獲取鎖:
        lock.acquire()
        try:
            # 放心地改吧:
            change_it(n)
        finally:
            # 改完了一定要釋放鎖:
            lock.release()

創(chuàng)建一個(gè)鎖就是通過threading.Lock()來實(shí)現(xiàn)。

不過這里的鎖雖然可以讓我們的內(nèi)容不那么紊亂,但是包含鎖的某段代碼實(shí)際上只能以單線程模式執(zhí)行,效率就大大地下降了甚至他會讓多個(gè)鎖在一起執(zhí)行可能形成一個(gè)死鎖。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

陕西省| 通辽市| 迭部县| 习水县| 平遥县| 安福县| 盐边县| 九寨沟县| 方山县| 田阳县| 东城区| 巴林右旗| 合肥市| 澄迈县| 尖扎县| 洛南县| 阳朔县| 泽普县| 武定县| 桃源县| 文成县| 右玉县| 景谷| 金平| 灵台县| 双江| 福泉市| 乐安县| 武平县| 峨山| 平远县| 扎鲁特旗| 青河县| 芦溪县| 石景山区| 剑阁县| 铁力市| 兰坪| 连云港市| 南宫市| 岐山县|