我有一個多執行緒程式,其中我正在運行的功能之一與自身重疊。下面是一個例子:
import threading
def numbers(num):
for i in range(0, num):
print(i)
def main():
threading.Thread(target=numbers, args=[1000]).start()
while True:
threading.Thread(target=main).start()
例如,我希望它一直運行到用戶退出為止。
在這個例子中,我希望它列印從 0 到 num(0 到 1000)的所有數字,但它列印出如下內容:
5
2
3
1
2
0
3
4
5
16
4
0
7
1
2850
1
6
7292
8
6
3
9
10
40
1
237
5
6
10
8
9
1111
03
4
3
正如我所看到的,它正在啟動執行緒,即使它已經在運行,所以它自己重疊。
我的問題是,如果執行緒已經在運行,是否有辦法不啟動它,這樣它會列印 0 到 1000,然后重復從 0 到 1000 重新啟動,但將它保留為一個執行緒,這樣程式的其余部分將繼續運行它在計數嗎?
uj5u.com熱心網友回復:
僅當前一個執行緒已完成運行時,檢查 is_alive 屬性以啟動一個執行緒。
import threading
def numbers(num):
for i in range(0, num):
print(i)
current_thread = None
while True:
if current_thread is None or not current_thread.is_alive():
current_thread = threading.Thread(target=numbers, args=[100])
current_thread.start()
# do something else
uj5u.com熱心網友回復:
每次呼叫threading.Thread(target=main).start()都會創建一個新執行緒并將其啟動。如果要等到執行緒結束,必須使用.join如下:
t = threading.Thread(target=main).start()
t.join()
這在里面while True將創建無限執行緒,但等待一個到另一個完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361151.html
下一篇:僅計算當前活動的執行緒
