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

Python語法學習之線程的創(chuàng)建與常用方法詳解

 更新時間:2022年04月12日 08:29:10   作者:渴望力量的哈士奇  
本文主要介紹了線程的使用,線程是利用進程的資源來執(zhí)行業(yè)務(wù),并且通過創(chuàng)建多個線程,對于資源的消耗相對來說會比較低,今天就來看一看線程的使用方法具體有哪些吧

線程的創(chuàng)建與使用

在Python中有很多的多線程模塊,其中 threading 模塊就是比較常用的。下面就來看一下如何利用 threading 創(chuàng)建線程以及它的常用方法。

線程的創(chuàng)建 -threading

函數(shù)名介紹舉例
Thread創(chuàng)建線程Thread(target, args)

Thread 的動能介紹:通過調(diào)用 threading 模塊的 Thread 類來實例化一個線程對象;它有兩個參數(shù): target 與 args (與創(chuàng)建進程時,參數(shù)相同)。target 為創(chuàng)建線程時要執(zhí)行的函數(shù),而 args 為是要執(zhí)行這個函數(shù)時需要傳入的參數(shù)。

線程對象的常用方法

接下里看一下線程對象中都有哪些常用的方法:

函數(shù)名介紹用法
start啟動線程start()
join阻塞線程直到線程執(zhí)行結(jié)束join(timeout=None)
getName獲取線程的名字getName()
setName設(shè)置線程的名字setName(name)
is_alive判斷線程是否存活is_alive()
setDaemon守護線程setDaemon(True)
  • start 函數(shù):啟動一個線程;沒有任何返回值和參數(shù)。
  • join 函數(shù):和進程中的 join 函數(shù)一樣;阻塞當前的程序,主線程的任務(wù)需要等待當前子線程的任務(wù)結(jié)束后才可以繼續(xù)執(zhí)行;參數(shù)為
  • timeout:代表阻塞的超時時間。
  • getName 函數(shù):獲取當前線程的名字。
  • setName 函數(shù):給當前的線程設(shè)置名字;參數(shù)為 name:是一個字符串類型
  • is_alive 函數(shù):判斷當前線程的狀態(tài)是否存貨
  • setDaemon 函數(shù):它是一個守護線程;如果腳本任務(wù)執(zhí)行完成之后,即便進程池還沒有執(zhí)行完成業(yè)務(wù)也會被強行終止。子線程也是如此,如果希望主進程或者是主線程先執(zhí)行完自己的業(yè)務(wù)之后,依然允許子線程繼續(xù)工作而不是強行關(guān)閉它們,只需要設(shè)置 setDaemon() 為 True 就可以了。

PS:通過上面的介紹,會發(fā)現(xiàn)其實線程對象里面的函數(shù)幾乎和進程對象中的函數(shù)非常相似,它們的使用方法和使用場景幾乎是相同的。

線程演示案例

單線程初始案例

演示 多線程之前 先看一下下面這個案例,運行結(jié)束后看看共計耗時多久

1、定義一個列表,里面寫一些內(nèi)容。

2、再定義一個新列表,將上一個列表的內(nèi)容隨機寫入到新列表中;并且刪除上一個列表中隨機獲取到的內(nèi)容。

3、這里需要使用到 r andom 內(nèi)置模塊

代碼示例如下:

# coding:utf-8


import time
import random


old_lists = ['羅馬假日', '怦然心動', '時空戀旅人', '天使愛美麗', '天使之城', '倒霉愛神', '愛樂之城']

new_lists = []


def work():
    if len(old_lists) == 0:     # 判斷 old_list 的長度,如果為0 ,則表示 該列表的內(nèi)容已經(jīng)被刪光了
        return '\'old_list\' 列表內(nèi)容已經(jīng)全部刪除'
    old_choice_data = random.choice(old_lists)      # random 模塊的 choice函數(shù)可以隨機獲取傳入的 old_list 的元素
    old_lists.remove(old_choice_data)               # 當獲取到這個隨機元素之后,將該元素從 old_lists 中刪除
    new_choice_data = '%s_new' % old_choice_data    # 將隨機獲取到的隨機元素通過格式化方式重新賦值,區(qū)別于之前的元素
    new_lists.append(new_choice_data)               # 將格式化的新的隨機元素添加至 new_lists 列表

    time.sleep(1)


if __name__ == '__main__':
    strat_time = time.time()

    for i in range(len(old_lists)):
        work()

    if len(old_lists) ==0:
        print('\'old_lists\' 當前為:{}'.format(None))
    else:
        print(('\'old_lists\' 當前為:{}'.format(old_lists)))

    if not len(new_lists) == 0:
        print(('\'new_lists\' 當前為:{}'.format(new_lists)))
    else:
        print('\'new_lists\' 當前為:{}'.format(None))

    end_time = time.time()
    print('運行結(jié)束,累計耗時:{} 秒'.format(end_time - strat_time))

運行結(jié)果如下:

從運行輸出結(jié)果我們可以看到整個腳本運行共計耗時7秒,而且 new_lists 列表內(nèi)的元素都經(jīng)過格式化處理后加上了 _new ;不僅如此, 因為 random模塊的choice函數(shù) 原因,new_lists 的內(nèi)容順序與 old_lists 也是不一樣;每次運行順序都會不一樣,所以 old_lists 的順序是無法得到保障的。

多線程演示案例

代碼示例如下:

# coding:utf-8


import time
import random
import threading


old_lists = ['羅馬假日', '怦然心動', '時空戀旅人', '天使愛美麗', '天使之城', '倒霉愛神', '愛樂之城']

new_lists = []


def work():
    if len(old_lists) == 0:     # 判斷 old_list 的長度,如果為0 ,則表示 該列表的內(nèi)容已經(jīng)被刪光了
        return '\'old_list\' 列表內(nèi)容已經(jīng)全部刪除'
    old_choice_data = random.choice(old_lists)      # random 模塊的 choice函數(shù)可以隨機獲取傳入的 old_list 的元素
    old_lists.remove(old_choice_data)               # 當獲取到這個隨機元素之后,將該元素從 old_lists 中刪除
    new_choice_data = '%s_new' % old_choice_data    # 將隨機獲取到的隨機元素通過格式化方式重新賦值,區(qū)別于之前的元素
    new_lists.append(new_choice_data)               # 將格式化的新的隨機元素添加至 new_lists 列表

    time.sleep(1)


if __name__ == '__main__':
    strat_time = time.time()

    print('\'old_lists\'初始長度為:{}'.format(len(old_lists)))	# 獲取 old_lists 與 new_lists 最初始的長度
    print('\'new_lists\'初始長度為:{}'.format(len(new_lists)))
    thread_list = []        # 定義一個空的 thread_list 對象,用以下方添加每個線程

    for i in range(len(old_lists)):
        thread_work = threading.Thread(target=work)     # 定義一個線程實例化對象執(zhí)行 work 函數(shù),因為 work 函數(shù)沒有參數(shù)所以不用傳 args
        thread_list.append(thread_work)                 # 將 thread_work 添加進 thread_list
        thread_work.start()                             # 啟動每一個線程

    for t in thread_list:   # 通過for循環(huán)將每一個線程進行阻塞
        t.join()

    if len(old_lists) ==0:
        print('\'old_lists\' 當前為:{}'.format(None), '當前長度為:{}'.format(len(old_lists)))
    else:
        print(('\'old_lists\' 當前為:{}'.format(old_lists)))

    if not len(new_lists) == 0:
        print('\'new_lists\' 當前長度為:{}'.format(len(new_lists)))
        print('\'new_lists\' 當前的值為:{}'.format(new_lists))
    else:
        print('\'new_lists\' 當前為:{}'.format(None))

    end_time = time.time()
    print('運行結(jié)束,累計耗時:{} 秒'.format(end_time - strat_time))

運行結(jié)果如下:

從運行的結(jié)果來看,我們初始的單線程任務(wù)耗時為 7秒,在使用多線程之后,僅耗時 1秒就完成了,大大的提高了我們的運行效率。

線程的問題

通過上面的練習,我們發(fā)現(xiàn)進程的使用方法幾乎與進程是一模一樣的。它們都可以互不干擾的執(zhí)行程序,也可以使得主線程的程序不需要等待子線程的任務(wù)完成之后再去執(zhí)行。只不過剛剛的演示案例中我們使用了 join() 函數(shù)進行了阻塞,這里可以吧 join() 去掉,看看執(zhí)行效果。

與進程一樣,線程也存在著一定的問題。

線程執(zhí)行的函數(shù),也同樣是無法獲取返回值的。

當多個線程同時修改文件一樣會造成被修改文件的數(shù)據(jù)錯亂的錯誤(因為都是并發(fā)去操作一個文件,特別是在處理交易場景的時候,需要尤為注意)。

到此這篇關(guān)于Python語法學習之線程的創(chuàng)建與常用方法詳解的文章就介紹到這了,更多相關(guān)Python 線程創(chuàng)建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決TensorFlow GPU版出現(xiàn)OOM錯誤的問題

    解決TensorFlow GPU版出現(xiàn)OOM錯誤的問題

    今天小編就為大家分享一篇解決TensorFlow GPU版出現(xiàn)OOM錯誤的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Django media static外部訪問Django中的圖片設(shè)置教程

    Django media static外部訪問Django中的圖片設(shè)置教程

    這篇文章主要介紹了Django media static外部訪問Django中的圖片設(shè)置教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python學習之二叉樹實現(xiàn)的示例詳解

    Python學習之二叉樹實現(xiàn)的示例詳解

    這篇文章主要為大家詳細介紹了Python實現(xiàn)二叉樹的相關(guān)知識,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-04-04
  • python?snap7讀寫PLC的操作方法

    python?snap7讀寫PLC的操作方法

    這篇文章主要介紹了python?snap7讀寫PLC的操作方法,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • python實現(xiàn)的簡單FTP上傳下載文件實例

    python實現(xiàn)的簡單FTP上傳下載文件實例

    這篇文章主要介紹了python實現(xiàn)的簡單FTP上傳下載文件的方法,實例分析了Python基于FTP模塊實現(xiàn)文件傳輸?shù)募记?需要的朋友可以參考下
    2015-06-06
  • python 畫二維、三維點之間的線段實現(xiàn)方法

    python 畫二維、三維點之間的線段實現(xiàn)方法

    今天小編就為大家分享一篇python 畫二維、三維點之間的線段實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 使用NumPy讀取MNIST數(shù)據(jù)的實現(xiàn)代碼示例

    使用NumPy讀取MNIST數(shù)據(jù)的實現(xiàn)代碼示例

    這篇文章主要介紹了使用NumPy讀取MNIST數(shù)據(jù)的實現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Python 隨機按鍵模擬2小時

    Python 隨機按鍵模擬2小時

    這篇文章主要介紹了Python 隨機按鍵模擬的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • Python中用memcached來減少數(shù)據(jù)庫查詢次數(shù)的教程

    Python中用memcached來減少數(shù)據(jù)庫查詢次數(shù)的教程

    這篇文章主要介紹了Python中用memcached來減少數(shù)據(jù)庫查詢次數(shù)的教程,memcached是一種分布式的內(nèi)存緩存工具,使用后可以減少對硬盤的I/O次數(shù),需要的朋友可以參考下
    2015-04-04
  • python中matplotlib條件背景顏色的實現(xiàn)

    python中matplotlib條件背景顏色的實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于python中matplotlib條件背景顏色的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09

最新評論

手机| 宽甸| 梁平县| 青阳县| 新密市| 容城县| 神木县| 巴南区| 崇州市| 铁岭市| 海晏县| 景洪市| 腾冲县| 洪湖市| 察哈| 镇远县| 新绛县| 阳城县| 长葛市| 石嘴山市| 冷水江市| 高碑店市| 长泰县| 丹巴县| 井陉县| 余江县| 光泽县| 合肥市| 泸溪县| 蒙阴县| 威海市| 孙吴县| 临西县| 汉中市| 钟祥市| 江达县| 万州区| 长沙市| 克什克腾旗| 陆良县| 巴楚县|