網站首頁 編程語言 正文
如何使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
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-04-03 Pytorch寫數字識別LeNet模型_python
- 2022-01-30 tortoiseGit推送每次需要輸入密碼,解決方案
- 2023-01-21 C++實現逆波蘭表達式的例題詳解_C 語言
- 2022-12-24 詳解Python裝飾器的四種定義形式_python
- 2022-12-29 React動態更改html標簽的實現方式_React
- 2021-12-04 使用Go實現TLS服務器和客戶端的示例_Golang
- 2022-10-27 SQL案例學習之字符串的合并與拆分方法總結_oracle
- 2022-11-26 詳解redis-cli?命令_Redis
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支