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

python利用線程實(shí)現(xiàn)多任務(wù)

 更新時(shí)間:2020年09月18日 10:50:15   作者:小名叫小明  
這篇文章主要介紹了python利用線程實(shí)現(xiàn)多任務(wù),幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下

我們?cè)趺醋屢粋€(gè) Python 程序里邊實(shí)現(xiàn)多任務(wù)呢?

實(shí)現(xiàn)多任務(wù)可以有多種方式,這里我們先了解使用線程的方式實(shí)現(xiàn)多任務(wù)。

線程是實(shí)現(xiàn)多任務(wù)的一種的手段。

其實(shí)用的是 threading 模塊,threading 模塊里有一個(gè)類叫 Thread。

Python 的 thread 模塊是比較底層的模塊,Python 的 threading 模塊是對(duì) thread 做了一些包裝的,可以更加方便的被使用。

一、通過(guò)構(gòu)造器傳函數(shù)的方式創(chuàng)建線程

我們先來(lái)看一個(gè)實(shí)例:

import time
import threading

def saySorry():
  print("親愛的,我錯(cuò)了,我能吃飯了么?")
  time.sleep(1)

if __name__ == "__main__":
  for i in range(5):
    t = threading.Thread(target=saySorry)
    # 啟動(dòng)線程,即讓線程開始執(zhí)行
    t.start()

運(yùn)行結(jié)果:

threading.Thread 創(chuàng)建了一個(gè)對(duì)象,但是不會(huì)創(chuàng)建線程。

當(dāng)調(diào)用 Thread 創(chuàng)建出來(lái)的實(shí)例對(duì)象 t.start() 執(zhí)行的時(shí)候,才會(huì)創(chuàng)建線程,并且讓這個(gè)線程開始運(yùn)行。

一個(gè)程序運(yùn)行起來(lái)之后,一定有一個(gè)執(zhí)行代碼的東西。這個(gè)東西就稱之為線程。

一個(gè)程序運(yùn)行的時(shí)候,有一個(gè)主線程,當(dāng) t.start() 執(zhí)行的時(shí)候,就會(huì)創(chuàng)建一個(gè)子線程,子線程可以單獨(dú)去執(zhí)行,這就實(shí)現(xiàn)了多任務(wù)的運(yùn)行。

二、查看程序中的線程數(shù)量

如果想知道程序中線程的數(shù)量,可以調(diào)用 threading 中的 enumerate(),它返回了一個(gè)當(dāng)前程序中運(yùn)行的線程的列表,包括主線程自己。

import threading
from time import sleep

def sing():
  for i in range(3):
    print("正在唱歌...%d" % i)
    sleep(1)

def dance():
  for i in range(3):
    print("正在跳舞...%d" % i)
    sleep(1)

if __name__ == '__main__':

  t1 = threading.Thread(target=sing)
  t2 = threading.Thread(target=dance)

  t1.start()
  t2.start()

  while True:
    length = len(threading.enumerate())
    print('當(dāng)前運(yùn)行的線程數(shù)為:%d' % length)
    if length <= 1:
      break

    sleep(0.5)

運(yùn)行結(jié)果:

為了看清楚 enumerate() 究竟是什么,我們修改下代碼打印 enumerate(),更能看清楚線程的數(shù)量和狀態(tài)。

import threading
from time import sleep

def sing():
  for i in range(5):
    print("正在唱歌...%d" % i)
    sleep(1)


def dance():
  for i in range(3):
    print("正在跳舞...%d" % i)
    sleep(1)


if __name__ == '__main__':

  t1 = threading.Thread(target=sing)
  t2 = threading.Thread(target=dance)

  t1.start()
  t2.start()

  while True:
    print(threading.enumerate())

    if len(threading.enumerate()) <= 1:
      break

    sleep(0.5)

運(yùn)行結(jié)果:

三、通過(guò)繼承 Thread 的方式創(chuàng)建線程

經(jīng)過(guò)我們之前的學(xué)習(xí),能夠看出,通過(guò)使用 threading 模塊能完成多任務(wù)的程序開發(fā)。

但是為了讓每個(gè)線程的封裝性更完美,所以使用 threading 模塊時(shí),往往會(huì)定義一個(gè)新的子類 class。

子類只要繼承 threading.Thread 就可以了,然后重寫 run 方法。

所以說(shuō),Python 主要通過(guò)兩種方式來(lái)創(chuàng)建線程:

  1. 使用 threading 模塊中 Thread 類的構(gòu)造器創(chuàng)建線程。即直接對(duì)類 threading.Thread 進(jìn)行實(shí)例化創(chuàng)建線程,并調(diào)用實(shí)例化對(duì)象的 start() 方法啟動(dòng)線程。
  2. 繼承 threading 模塊中的 Thread 類創(chuàng)建線程類。即用 threading.Thread 派生出一個(gè)新的子類,將新建類實(shí)例化創(chuàng)建線程,并調(diào)用其 start() 方法啟動(dòng)線程。

運(yùn)行結(jié)果:

I'm Thread-1 @ 0
I'm Thread-1 @ 1
I'm Thread-1 @ 2

Python 的 threading.Thread 類有一個(gè) run 方法,用于定義線程的功能函數(shù),可以在自己的線程類中覆蓋該方法。

而創(chuàng)建自己的線程實(shí)例后,通過(guò) Thread 類的 start 方法,可以啟動(dòng)該線程,交給 Python 虛擬機(jī)進(jìn)行調(diào)度,當(dāng)該線程獲得執(zhí)行的機(jī)會(huì)時(shí),就會(huì)調(diào)用 run 方法執(zhí)行線程。

通過(guò)繼承的方式來(lái)實(shí)現(xiàn)線程一般應(yīng)用于,這個(gè)線程的邏輯比較復(fù)雜,并且分成了幾個(gè)方法或函數(shù)。

以上就是python利用線程實(shí)現(xiàn)多任務(wù)的詳細(xì)內(nèi)容,更多關(guān)于python 線程實(shí)現(xiàn)多任務(wù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 十大特性

    Python 十大特性

    這篇文章主要給大家分享的是Python十大特性,Python 編程語(yǔ)言是世界上發(fā)展最快的編程語(yǔ)言。這一高級(jí)通用編程語(yǔ)言提供了廣泛的實(shí)際應(yīng)用,并且是一種非常流行的認(rèn)證,下面我們就來(lái)看看它都有哪些特性吧
    2022-01-01
  • python-opencv實(shí)現(xiàn)視頻指定幀數(shù)間隔圖像的保存功能

    python-opencv實(shí)現(xiàn)視頻指定幀數(shù)間隔圖像的保存功能

    這篇文章主要介紹了python-opencv實(shí)現(xiàn)視頻指定幀數(shù)間隔圖像的保存的方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 一文帶你理解Python中面向?qū)ο缶幊蘋OP的概念

    一文帶你理解Python中面向?qū)ο缶幊蘋OP的概念

    在Python中,面向?qū)ο缶幊蹋∣OP)是一種在編程中使用對(duì)象和類的編程范式,它旨在實(shí)現(xiàn)現(xiàn)實(shí)世界的實(shí)體,下面我們就一起來(lái)看看它的相關(guān)知識(shí)吧
    2023-08-08
  • python安裝讀取grib庫(kù)總結(jié)(推薦)

    python安裝讀取grib庫(kù)總結(jié)(推薦)

    這篇文章主要介紹了python安裝讀取grib庫(kù)總結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 使用Python讀取.nc文件的方法詳解

    使用Python讀取.nc文件的方法詳解

    .nc文件,即NetCDF(Network?Common?Data?Form)文件,是一種用于存儲(chǔ)科學(xué)數(shù)據(jù)的文件格式,本文主要為大家介紹了兩種常見的讀取方法,希望對(duì)大家有所幫助
    2024-03-03
  • 靈活運(yùn)用Python 枚舉類來(lái)實(shí)現(xiàn)設(shè)計(jì)狀態(tài)碼信息

    靈活運(yùn)用Python 枚舉類來(lái)實(shí)現(xiàn)設(shè)計(jì)狀態(tài)碼信息

    在python中枚舉是一種類(Enum,IntEnum),存放在enum模塊中。枚舉類型可以給一組標(biāo)簽賦予一組特定的值,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Python基礎(chǔ)教程之while循環(huán)用法講解

    Python基礎(chǔ)教程之while循環(huán)用法講解

    Python中除了for循環(huán)之外還有一個(gè)while循環(huán),下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之while循環(huán)用法講解的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • python matplotlib庫(kù)的基本使用

    python matplotlib庫(kù)的基本使用

    這篇文章主要介紹了python matplotlib庫(kù)的基本使用,幫助大家繪制圖表,進(jìn)行數(shù)據(jù)可視化分析,感興趣的朋友可以了解下
    2020-09-09
  • Python利用socket模塊開發(fā)簡(jiǎn)單的端口掃描工具的實(shí)現(xiàn)

    Python利用socket模塊開發(fā)簡(jiǎn)單的端口掃描工具的實(shí)現(xiàn)

    這篇文章主要介紹了Python利用socket模塊開發(fā)簡(jiǎn)單的端口掃描工具的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 11個(gè)Python的循環(huán)技巧分享

    11個(gè)Python的循環(huán)技巧分享

    當(dāng)我們處理數(shù)據(jù)時(shí),有時(shí)候需要?jiǎng)?chuàng)建多個(gè)列表以存儲(chǔ)不同類型或不同條件下的數(shù)據(jù),在Python中,我們可以利用循環(huán)來(lái)快速、高效地創(chuàng)建這些列表,本文將介紹如何使用循環(huán)在Python中創(chuàng)建多個(gè)列表,需要的可以參考下
    2024-04-04

最新評(píng)論

田林县| 兰坪| 洛隆县| 汾西县| 晋中市| 佛冈县| 新竹县| 宁乡县| 祁门县| 宜兰市| 昂仁县| 唐河县| 资阳市| 安新县| 阳江市| 区。| 新蔡县| 拜泉县| 富蕴县| 巴彦淖尔市| 吉木乃县| 双桥区| 绿春县| 台东市| 金昌市| 佳木斯市| 石屏县| 东方市| 民乐县| 灵石县| 白水县| 北辰区| 海淀区| 云浮市| 铜陵市| 余庆县| 南城县| 嘉黎县| 卢湾区| 宾阳县| 梓潼县|