欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python子線程如何有序執(zhí)行

 更新時間:2021年05月25日 11:58:14   作者:熊子q  
最近在寫一個項目,需要用到子線程,那么python子線程如何有序執(zhí)行,需要的朋友們下面隨著小編來一起學習學習吧

一、前情提要

最近在寫一個項目,需要用到子線程,但是我們小學二年級就學過操作系統(tǒng), 線程的執(zhí)行是由系統(tǒng)的CPU調(diào)度算法所決定的,調(diào)度算法按照一系列的要求來從 就緒隊列中 選擇合適的線程分配CPU資源。

二、場景重現(xiàn)

好了,換句話說,線程的執(zhí)行順序是不確定的。來個python代碼我們看一下:

import threading

def fun():
    '''執(zhí)行函數(shù)'''
    print(threading.current_thread().getName()+' 正在執(zhí)行!')

# 線程隊列
ths = []
for i in range(10):
    ths.append(threading.Thread(target=fun))
# 依次啟動線程
for th in ths:
    th.start()

看一下效果:

不難看出,雖然第一次運行的結(jié)果時有序執(zhí)行子線程,但是后續(xù)重復(fù)運行程序的結(jié)果,顯然是順序不確定的, 這就正好體現(xiàn)了線程的隨機性。

那么我們在某種特殊的場景下,我們需要讓子線程按照順序有序執(zhí)行,那改怎么做呢?

三、解決方案(一)

通過查詢threading API我們可以發(fā)現(xiàn)一個這樣的函數(shù):

Thread.join(timeout=None)

該方法的作用是等待當前執(zhí)行線程終止

也就是說,哦那我調(diào)用start()方法開始線程之后,再調(diào)用這個方法不就行了嗎?答案是肯定的

import threading

def fun():
    '''執(zhí)行函數(shù)'''
    print(threading.current_thread().getName()+' 正在執(zhí)行!')

# 線程隊列
ths = []
for i in range(10):
    ths.append(threading.Thread(target=fun))
# 依次啟動線程
for th in ths:
    th.start()
    th.join()

看一下效果:

在這里插入圖片描述

這時候我們發(fā)現(xiàn),不管如何運行子線程的執(zhí)行順序都是有序的

四、解決方案(二)

就這一種方法嗎?當然不是的,而且上面那種方法,如果是控制臺界面是沒有問題的,但是如果是GUI界面,那就由大問題了。

那么我們再想想join()方法,還可以換種方法用嗎?

我們可以用一個小技巧,可以將上一個線程傳入target,

在函數(shù)中判斷,如果上一個線程還在執(zhí)行,那么就調(diào)用join()方法等待其執(zhí)行,等待執(zhí)行完畢后,再讓當前線程執(zhí)行。

代碼:

import threading

def fun(preThread):
    '''執(zhí)行函數(shù)'''
    # 等待上一個線程執(zhí)行完畢
    if preThread != None:
        preThread.join()
    # 執(zhí)行當前線程
    print(threading.current_thread().getName()+' 正在執(zhí)行!')

# 線程隊列
ths = []
for i in range(10):
    if i == 0:
        ths.append(threading.Thread(target=fun, args=(None, )))
    else :
        ths.append(threading.Thread(target=fun, args=(ths[-1], )))
# 依次啟動線程
for th in ths:
    th.start()

看一下效果:

在這里插入圖片描述

這個時候,我們發(fā)現(xiàn),子線程的執(zhí)行順序也是有序的!Nice!

五、結(jié)束

通過以上兩種解決方案,完美解決這個問題!

到此這篇關(guān)于python子線程如何有序執(zhí)行的文章就介紹到這了,更多相關(guān)python子線程有序執(zhí)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python調(diào)用ChatGPT的API實現(xiàn)文章生成

    Python調(diào)用ChatGPT的API實現(xiàn)文章生成

    最近ChatGPT大火,在3.5版本后開放了接口API,所以很多人開始進行實操,這里我就用python來為大家實現(xiàn)一下,如何調(diào)用API并提問返回文章的說明
    2023-03-03
  • 在python tkinter中Canvas實現(xiàn)進度條顯示的方法

    在python tkinter中Canvas實現(xiàn)進度條顯示的方法

    今天小編就為大家分享一篇在python tkinter中Canvas實現(xiàn)進度條顯示的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python實現(xiàn)刪除某列中含有空值的行的示例代碼

    Python實現(xiàn)刪除某列中含有空值的行的示例代碼

    這篇文章主要介紹了Python實現(xiàn)刪除某列中含有空值的行的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • python正則過濾字母、中文、數(shù)字及特殊字符方法詳解

    python正則過濾字母、中文、數(shù)字及特殊字符方法詳解

    這篇文章主要介紹了python正則過濾字母、數(shù)字及特殊字符方法詳解,需要的朋友可以參考下
    2020-02-02
  • Python實現(xiàn)歸一化算法詳情

    Python實現(xiàn)歸一化算法詳情

    這篇文章主要介紹了Python實現(xiàn)歸一化算法,歸一化算法Normalization將數(shù)據(jù)處理成量綱一直的數(shù)據(jù),一般在進行建模的時候需要進行數(shù)據(jù)歸一化處理,下文詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • python如何獲取文件當前位置和定位某個位置

    python如何獲取文件當前位置和定位某個位置

    這篇文章主要介紹了python如何獲取文件當前位置和定位某個位置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • django文檔學習之a(chǎn)pplications使用詳解

    django文檔學習之a(chǎn)pplications使用詳解

    這篇文章主要介紹了Python文檔學習之a(chǎn)pplications使用詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 六個Python編程最受用的內(nèi)置函數(shù)使用詳解

    六個Python編程最受用的內(nèi)置函數(shù)使用詳解

    在日常的python編程中使用這幾個函數(shù)來簡化我們的編程工作,經(jīng)常使用能使編程效率大大地提高。本文為大家總結(jié)了六個Python編程最受用的內(nèi)置函數(shù),感興趣的可以了解一下
    2022-07-07
  • python transpose()處理高維度數(shù)組的軸變換的實現(xiàn)

    python transpose()處理高維度數(shù)組的軸變換的實現(xiàn)

    本文主要介紹了python transpose()處理高維度數(shù)組的軸變換的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-09-09
  • Python?設(shè)計模式行為型解釋器模式

    Python?設(shè)計模式行為型解釋器模式

    本文介紹了Python解釋器模式,解釋器模式即Interpreter?Pattern,給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子,下面文章進入更深層學習,需要的小伙伴可以參考一下
    2022-02-02

最新評論