日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

如何使python中線程等待其他線程完了再執行;python-threading中的join方法;python的thread庫如何判斷子線程所綁定的函數全部執行完畢?

作者:別出BUG求求了 更新時間: 2023-11-17 編程語言

1. 主要方法

讓所有的子線程都join()就可以了.

不用join()的時候是這樣的

在這里插入圖片描述
用了join()之后是這樣的.
在這里插入圖片描述

2. 案例一

(1)沒有join

import threading, time


def fun():
    print("線程開始")
    print("我是線程%s" % threading.current_thread())
    for i in range(10):
        time.sleep(1)
    print("線程結束")


if __name__ == '__main__':
    t = threading.Thread(target=fun, name="TTY")
    t.start()
    # t.join()
    print('我好了')

輸出結果:

線程開始
我好了
我是線程<Thread(TTY, started 123145546027008)>
線程結束

用圖像理解
在這里插入圖片描述

紫色的是主線程
橙色是線程TTY

因為主線程提前結束所以 我好了 這句話先出現
最后才出現線程TTY的 線程結束

(2)加入join

import threading, time


def fun():
    print("線程開始")
    print("我是線程%s" % threading.current_thread())
    for i in range(10):
        time.sleep(1)
    print("線程結束")


if __name__ == '__main__':
    t = threading.Thread(target=fun, name="TTY")
    t.start()
    t.join()
    print('我好了')

區別是加入了join
Join函數的文檔解釋是:一直等到線程結束

運行結果:

線程開始
我是線程<Thread(TTY, started 123145365737472)>
線程結束
我好了

主線程不會繼續往前,而是等待,等到TTY結束再繼續往前。所以看到結果“我好了”出現在最后

在這里插入圖片描述

3. 案例二:python的線程等待

1線程等待(join方法)

  • 在多線程的程序中往往一個線程要等待其他線程執行完畢才可以繼續執行,這時就可以使用join 函數
  • 使用方法

線程對象.join() 在一個線程代碼中執行這條語句,當前的線程就會停止執行,一直等到指定對象結束后才會繼續執行,(即這條語句啟動阻塞與等待的作用)

  • join(timeout=None) 參數 timeout 用于設置超時時間,單位秒,如果為None,則一直等待,直到結束
import threading
import time
 
values = []
# 線程體函數
def thread_body():
    print(f'{threading.current_thread().name} 開始!')
 
    for i in range(3):
        print(f'{threading.current_thread().name} 執行!')
        values.append(i)
        # 線程休眠
        time.sleep(3)
 
    print(f'{threading.current_thread().name}結束!')
# 線程等待
if __name__ == '__main__':
    # 創建線程對象
    thread = threading.Thread(target=thread_body)
    # 執行線程體
    thread.start()
    # 說明:在當前線程中(主線程)調用了join(),就以為著必須等待 thread 線程執行完畢,才會執行主線程。
    # 現象:類似于將主線程阻塞了。
    # thread.join()
    thread.join()
    print(f'values = {values}')

沒調用此函數時,列表中增加不進去

Thread-1 (thread_body) 開始!values = []
Thread-1 (thread_body) 執行!
Thread-1 (thread_body) 執行!
Thread-1 (thread_body) 執行!
Thread-1 (thread_body)結束!
Process finished with exit code 0

線程等待案例

import threading
import time
 
def reading():
    for i in range(3):
        print(f'reading...',i)
        time.sleep(2)
 
def thread_body():
        thread = threading.Thread(target=reading)
        thread.start()
        thread.join()
 
if __name__ == '__main__':
    print(f'{threading.current_thread().name}.開始!')
    # 創建線程對象
    thread = threading.Thread(target=thread_body)
    #執行線程體
    thread.start()
    # 線程等待
    thread.join()
    print(f'{threading.current_thread().name}執行完畢!')

執行結果

MainThread.開始!
reading… 0
reading… 1
reading… 2
MainThread執行完畢!
Process finished with exit code 0

原文鏈接:https://blog.csdn.net/weixin_39589455/article/details/126809443

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新