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

Python?threading和Thread模塊及線程的實(shí)現(xiàn)

 更新時(shí)間:2022年06月13日 16:38:24   作者:??孤寒者????  
這篇文章主要介紹了Python?threading和Thread模塊及線程的實(shí)現(xiàn),Python通過(guò)兩個(gè)標(biāo)準(zhǔn)庫(kù)thread和threading提供對(duì)線程的支持,threading對(duì)thread進(jìn)行了封裝,具體實(shí)現(xiàn)介紹需要的朋友可以參考一下下面文章內(nèi)容

前言

  • 進(jìn)程: 打開(kāi)一個(gè)程序至少會(huì)有一個(gè)進(jìn)程  它是cpu調(diào)度的最小的單位。
  • 線程: 程序執(zhí)行的最小單位,一個(gè)進(jìn)程里面至少有一個(gè)線程,cpu會(huì)控制進(jìn)程里面的線程。

打個(gè)比方:

  • (1)打開(kāi)一個(gè)qq就是一個(gè)進(jìn)程的話,那么你可以同時(shí)和好多人聊天,和一個(gè)人聊天這就是一個(gè)線程。
  • (2)再打個(gè)比方,一條直行的高速公路,分好幾個(gè)車道,這整個(gè)告訴公路就相當(dāng)于一個(gè)進(jìn)程,那些車道就相當(dāng)于一個(gè)個(gè)線程,如果有一條車道上的車拐彎,別的車道的車就要等待,不然就撞車了。

注意:

  • (1)一個(gè)cpu同一時(shí)間只能處理一件事,如果同時(shí)有多個(gè)任務(wù),那么就輪換著執(zhí)行,但是每個(gè)任務(wù)執(zhí)行的時(shí)間非常短暫,無(wú)法感受到。
  • (2)使用線程的時(shí)候,不管它的順序,因?yàn)閏pu是隨機(jī)調(diào)度的。
  • (3)一個(gè)程序的執(zhí)行,就會(huì)有一個(gè)主線程

1. 線程

1.1 線程模塊

  • Python通過(guò)兩個(gè)標(biāo)準(zhǔn)庫(kù)thread 和threading提供對(duì)線程的支持 , threading對(duì)thread進(jìn)行了封裝。threading模塊中提供了Thread , Lock , RLock , Condition等組件。
  • 因此在實(shí)際的使用中我們一般都是使用threading。

1.1.1 Thread類

常用參數(shù)說(shuō)明:

  • target:表示調(diào)用對(duì)象,即子線程要執(zhí)行的任務(wù)。
  • name:子線程的名稱。
  • args:傳入target函數(shù)中的位置參數(shù),是一個(gè)元組,必須加逗號(hào)。

常用實(shí)例方法:

  • Thread.run(self)

線程啟動(dòng)時(shí)運(yùn)行的方法,由該方法調(diào)用target參數(shù)所指定的函數(shù)。

  • Thread.start(self)

啟動(dòng)線程,start方法就是去幫你調(diào)用run方法。

  • Thread.terminate(self)

強(qiáng)制終止線程。

  • Thread.join(self, timeout=None)

阻塞調(diào)用,主線程進(jìn)行等待。

  • Thread.setDaemon(self, daemonic)

將子線程設(shè)置為守護(hù)線程。

  • Thread.getName(self, name)

獲取線程名稱。

  • Thread.setName(self, name)

設(shè)置線程名稱:

但是剛剛也講了實(shí)際使用中我們都是使用的threading模塊,所以此處只是簡(jiǎn)單介紹一下Thread類,下面講解都是使用的threading模塊!

1.2 創(chuàng)建線程

在python中創(chuàng)建線程有兩種方式:

  • 實(shí)例Thread類;
  • 繼承重寫(xiě)Thread類。

1.2.1 實(shí)例Thread類法創(chuàng)建線程

(需要注意的是:下面在主線程里添加了t1,t2兩個(gè)子線程,①如果沒(méi)有設(shè)置setDaemon守護(hù)線程,那么整個(gè)文件順序執(zhí)行完[即主線程]之后,對(duì)應(yīng)的兩個(gè)子線程并行執(zhí)行;②如果設(shè)置了守護(hù)線程,那么對(duì)應(yīng)的設(shè)置了守護(hù)線程的子線程在主線程執(zhí)行完之后立馬被殺死!)

# -*- coding: utf-8 -*-
import threading
import time

# 定義線程要運(yùn)行的函數(shù)
def sing():
    # 為了便于觀察,sleep1秒
    for i in range(5):
        print("正在唱歌......")
        time.sleep(1)

def dance():
    # 為了便于觀察,sleep1秒
    for i in range(5):
        print("正在跳舞......")
        time.sleep(1)


if __name__ == '__main__':
    # 創(chuàng)建兩個(gè)線程實(shí)例
    t1 = threading.Thread(target=sing)
    t2 = threading.Thread(target=dance)
    # 設(shè)置守護(hù)線程
    t1.setDaemon(True)    # 守護(hù)線程:把子線程作為主線程的守護(hù)線程
    t2.setDaemon(True)
    # 啟動(dòng)線程
    t1.start()
    t2.start()
    print('主線程結(jié)束')

未設(shè)置t1,t2為守護(hù)線程時(shí)的輸出:

設(shè)置t1,t2為守護(hù)線程時(shí)的輸出:

1.2.1 繼承重寫(xiě)Thread類法創(chuàng)建線程

# -*- coding: utf-8 -*-
import threading
import time

# 繼承threading中的Thread類
class MyThread(threading.Thread):
    # 線程中所需要的參數(shù)
    def __init__(self, name):
        super().__init__()
        self.name = name
    # 重構(gòu)run方法,注意這個(gè)是表示線程活動(dòng)的方法,必須有!
    def run(self):
        print('I am %s' % self.name)
        time.sleep(2)

# 創(chuàng)建線程實(shí)例
t1 = MyThread('guhanzhe')
t2 = MyThread('coolboy')
# 啟動(dòng)線程
t1.start()
t2.start()
# 打印線程名
print(t1.getName())
print(t2.getName())

1.3 Join & setDaemon

在說(shuō)這兩個(gè)方法之前 , 需要知道主線程與子線程的概念:

  • 主線程 : 當(dāng)一個(gè)程序啟動(dòng)時(shí) , 就有一個(gè)線程開(kāi)始運(yùn)行 , 該線程通常叫做程序的主線程。
  • 子線程 : 因?yàn)槌绦蚴情_(kāi)始時(shí)就執(zhí)行的 , 如果你需要再創(chuàng)建線程 , 那么創(chuàng)建的線程就是這個(gè)主線程的子線程。

主線程的重要性體現(xiàn)在兩方面 :

  • 是產(chǎn)生其他子線程的線程;
  • 通常它必須最后完成執(zhí)行比如執(zhí)行各種關(guān)閉操作。

1.3.1 join

  • join : 阻塞調(diào)用程序 , 直到調(diào)用join () 方法的線程執(zhí)行結(jié)束, 才會(huì)繼續(xù)往下執(zhí)行。
# -*- coding: utf-8 -*-
import threading
import time

def run(name):
    print('I am %s' % name)
    time.sleep(2)
    print('子線程結(jié)束......')

t1 = threading.Thread(target=run, args=('guhanzhe', ))
t1.start()
# 阻塞主線程,等待子線程運(yùn)行結(jié)束
t1.join()
print('主線程結(jié)束......')

大家可以嘗試不加join()的話輸出是什么樣的哦~

1.3.2 setDaemon

  • setDaemon() 與 join() 基本上是相對(duì)的 , join會(huì)等子線程執(zhí)行完畢 ; 而setDaemon則不會(huì)等,主線程結(jié)束,對(duì)應(yīng)的設(shè)置了守護(hù)線程的子線程也會(huì)立馬被殺死。
# -*- coding: utf-8 -*-
import threading
import time

def run(name):
    print('I am %s' % name)
    time.sleep(2)
    print('子線程結(jié)束......')

t1 = threading.Thread(target=run, args=('guhanzhe', ))
# 設(shè)置守護(hù)線程
t1.setDaemon(True)
t1.start()
print('主線程結(jié)束......')

到此這篇關(guān)于Python threading和Thread模塊及線程的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python線程實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用python繪制彩色螺旋線代碼

    用python繪制彩色螺旋線代碼

    大家好,本篇文章主要講的是用python繪制彩色螺旋線代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • python3 配置logging日志類的操作

    python3 配置logging日志類的操作

    這篇文章主要介紹了python3 配置logging日志類的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • vscode如何選用不同的python的解釋器

    vscode如何選用不同的python的解釋器

    本文詳細(xì)介紹了在VSCode中設(shè)置Python運(yùn)行環(huán)境的步驟,包括安裝Python和VSCode插件、配置Python解釋器、設(shè)置虛擬環(huán)境、配置調(diào)試和運(yùn)行設(shè)置、配置終端環(huán)境以及安裝額外依賴,通過(guò)這些步驟,可以有效地管理Python開(kāi)發(fā)環(huán)境,提升開(kāi)發(fā)效率,感興趣的朋友一起看看吧
    2025-01-01
  • Python3實(shí)現(xiàn)生成隨機(jī)密碼的方法

    Python3實(shí)現(xiàn)生成隨機(jī)密碼的方法

    這篇文章主要介紹了Python3實(shí)現(xiàn)生成隨機(jī)密碼的方法,是Python程序設(shè)計(jì)中非常實(shí)用的一個(gè)技巧,需要的朋友可以參考下
    2014-08-08
  • python妹子圖簡(jiǎn)單爬蟲(chóng)實(shí)例

    python妹子圖簡(jiǎn)單爬蟲(chóng)實(shí)例

    這篇文章主要介紹了python妹子圖簡(jiǎn)單爬蟲(chóng),實(shí)例分析了Python爬蟲(chóng)程序所涉及的頁(yè)面源碼獲取、進(jìn)度顯示、正則匹配等技巧,需要的朋友可以參考下
    2015-07-07
  • Python hashlib模塊的使用示例

    Python hashlib模塊的使用示例

    這篇文章主要介紹了Python hashlib模塊的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-10-10
  • python實(shí)現(xiàn)多線程及線程間通信的簡(jiǎn)單方法

    python實(shí)現(xiàn)多線程及線程間通信的簡(jiǎn)單方法

    這篇文章主要為大家介紹了python實(shí)現(xiàn)多線程及線程間通信的簡(jiǎn)單方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • selenium+python 去除啟動(dòng)的黑色cmd窗口方法

    selenium+python 去除啟動(dòng)的黑色cmd窗口方法

    今天小編就為大家分享一篇selenium+python 去除啟動(dòng)的黑色cmd窗口方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Python實(shí)現(xiàn)解析參數(shù)的三種方法詳解

    Python實(shí)現(xiàn)解析參數(shù)的三種方法詳解

    這篇文章主要介紹了python解析參數(shù)的三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 使用Python制作一個(gè)惡意軟件刪除工具

    使用Python制作一個(gè)惡意軟件刪除工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python制作一個(gè)惡意軟件刪除工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02

最新評(píng)論

称多县| 茂名市| 和田县| 安宁市| 巩义市| 高安市| 冷水江市| 醴陵市| 喜德县| 靖边县| 台江县| 池州市| 宁河县| 博乐市| 铜川市| 滦平县| 云龙县| 阿合奇县| 丰都县| 民县| 格尔木市| 交城县| 高碑店市| 佛坪县| 都昌县| 五寨县| 大竹县| 长兴县| 和静县| 永吉县| 亚东县| 秦皇岛市| 镇坪县| 岱山县| 利辛县| 图木舒克市| 马鞍山市| 大厂| 铅山县| 车致| 平潭县|