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

Python?中?threading.Thread.join()?的使用方法示例詳解

 更新時間:2024年06月12日 11:45:09   作者:q56731523  
threading.Thread.join()用于阻塞當前線程,直到調用它的線程對象執(zhí)行完成或者超時,在Python中,想要充分利用多線程的優(yōu)勢,就需要對threading模塊中的 Thread 類了解,這里有一個非常簡單的多線程程序,幫助理解 threading.Thread.join 方法,感興趣的朋友跟隨小編一起看看吧

threading.Thread.join() 方法用于阻塞當前線程,直到調用它的線程對象執(zhí)行完成或者超時。這在需要等待子線程執(zhí)行完畢后再繼續(xù)執(zhí)行主線程時非常有用?;谒@種特性,我講用我的方法幫你選擇你合適的解決方案。

問題背景

在 Python 中,想要充分利用多線程的優(yōu)勢,就需要對 threading 模塊中的 Thread 類有一定的了解。這里有一個非常簡單的多線程程序,用于幫助我們理解 threading.Thread.join 方法。

import threading
val = 0
def increment():
    global val
    print("Inside increment")
    for x in range(100):
        val += 1
        print("val is now {} ".format(val))
thread1 = threading.Thread(target=increment, args=())
thread2 = threading.Thread(target=increment, args=())
thread1.start()
# thread1.join()
thread2.start()
# thread2.join()

這里有兩個問題:

如果注釋掉 thread1.join() 和 thread2.join(),那么輸出結果會是怎樣的?如果不注釋掉 thread1.join() 和 thread2.join(),那么輸出結果又會是怎樣的?

解決方法

1. 不注釋掉 join() 方法

如果我們不注釋掉 thread1.join() 和 thread2.join(),那么輸出結果如下:

Inside increment
val is now 1
val is now 2
val is now 3
...
val is now 100
Inside increment
val is now 1
val is now 2
val is now 3
...
val is now 100

2. 注釋掉 join() 方法

如果我們注釋掉 thread1.join() 和 thread2.join(),那么輸出結果如下:

Inside increment
Inside increment
val is now 1
val is now 1
val is now 2
val is now 3
...
val is now 99
val is now 2
val is now 3
...
val is now 98
val is now 99
val is now 100

比較輸出結果

通過比較這兩個輸出結果,我們可以發(fā)現,如果注釋掉 join() 方法,那么兩個線程的輸出結果是交織在一起的,這表明這兩個線程是并發(fā)執(zhí)行的。而如果不注釋掉 join() 方法,那么兩個線程的輸出結果是按照順序輸出的,這表明這兩個線程是串行執(zhí)行的。

join() 方法的作用

join() 方法的作用是讓調用它的線程等待另一個線程終止。在我們的例子中,thread1.join() 和 thread2.join() 的作用是讓主線程等待 thread1 和 thread2 兩個線程終止。如果不注釋掉這兩個方法,那么主線程就會等待這兩個線程終止后才繼續(xù)執(zhí)行。而如果注釋掉這兩個方法,那么主線程就不會等待這兩個線程終止,而是直接繼續(xù)執(zhí)行。

代碼示例:

為了更清楚地了解 join() 方法的作用,我們修改一下上面的代碼:

import threading
val = 0
def increment(msg,sleep_time):
    global val
    print("Inside increment")
    for x in range(10):
        val += 1
        print("%s : %d\n" % (msg,val))
        time.sleep(sleep_time)
thread1 = threading.Thread(target=increment, args=("thread_01",0.5))
thread2 = threading.Thread(target=increment, args=("thread_02",1))
thread1.start()
thread1.join()
thread2.start()
thread2.join()

如果我們運行這段代碼,那么輸出結果如下:

Inside increment
thread_01 : 1

thread_01 : 2

thread_01 : 3

thread_01 : 4

thread_01 : 5

thread_01 : 6

thread_01 : 7

thread_01 : 8

thread_01 : 9

thread_01 : 10

Inside increment
thread_02 : 1

thread_02 : 2

thread_02 : 3

thread_02 : 4

thread_02 : 5

thread_02 : 6

thread_02 : 7

thread_02 : 8

thread_02 : 9

thread_02 : 10

從輸出結果中,我們可以看到,這兩個線程是按照順序輸出的,這表明這兩個線程是串行執(zhí)行的。這是因為我們在代碼中使用了 thread1.join() 和 thread2.join() 這兩個方法,讓主線程等待這兩個線程終止后才繼續(xù)執(zhí)行。

在這個例子中,主線程啟動了一個子線程,并在子線程執(zhí)行完成之前調用了 join() 方法來等待子線程執(zhí)行完成。如有任何疑問可以評論區(qū)留言討論。

到此這篇關于Python 中 threading.Thread.join() 的使用方法的文章就介紹到這了,更多相關Python  threading.Thread.join()內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python 元類實例解析

    Python 元類實例解析

    這篇文章主要介紹了 Python 元類實例解析,此文的主要任務就是給大家徹底講明白什么是元類,需要的朋友可以參考下
    2018-04-04
  • 一文帶你搞懂Numpy中的深拷貝和淺拷貝

    一文帶你搞懂Numpy中的深拷貝和淺拷貝

    深拷貝和淺拷貝是Python中重要的概念,本文將重點介紹在NumPy中深拷貝和淺拷貝相關操作的定義和背后的原理,快跟隨小編一起來學習一下吧
    2022-04-04
  • python快排算法詳解

    python快排算法詳解

    在本篇內容里小編給大家整理了關于python快排算法的相關知識點內基礎內容,需要的朋友們學習下。
    2019-03-03
  • keras訓練曲線,混淆矩陣,CNN層輸出可視化實例

    keras訓練曲線,混淆矩陣,CNN層輸出可視化實例

    這篇文章主要介紹了keras訓練曲線,混淆矩陣,CNN層輸出可視化實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python numpy實現數組合并實例(vstack,hstack)

    Python numpy實現數組合并實例(vstack,hstack)

    這篇文章主要介紹了Python numpy實現數組合并(官網實例),涉及vstack,hstack的簡單用法,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python調用pytdx的代碼示例

    Python調用pytdx的代碼示例

    本文主要介紹了Python調用pytdx的代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Tkinter組件Checkbutton的具體使用

    Tkinter組件Checkbutton的具體使用

    Checkbutton組件用于實現確定是否選擇的按鈕,本文主要介紹了Tkinter組件Checkbutton的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • OpenCV半小時掌握基本操作之直線檢測

    OpenCV半小時掌握基本操作之直線檢測

    這篇文章主要介紹了OpenCV基本操作之直線檢測,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 結合Python工具使用TfidfVectorizer進行文本特征提取方式

    結合Python工具使用TfidfVectorizer進行文本特征提取方式

    在自然語言處理中,TF-IDF是一種重要的特征提取方法,本文介紹了如何使用Python的sklearn庫中的TfidfVectorizer進行文本特征提取,首先,需要安裝sklearn庫,TfidfVectorizer能將文本文檔集合轉換為TF-IDF特征矩陣
    2024-10-10
  • python 字符串格式化的示例

    python 字符串格式化的示例

    這篇文章主要介紹了python 字符串格式化的示例,幫助大家更好的理解和使用python處理字符串,感興趣的朋友可以了解下
    2020-09-09

最新評論