亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 current_thread() 總是返回 MainThread?

為什么 current_thread() 總是返回 MainThread?

慕婉清6462132 2022-07-26 20:47:07
我開始在 python 中學習線程。我在這里看到了這段代碼,上面寫著如果我想同時運行 2 個線程,我正在從免費的 udemy 課程中學習,這就是他打印線程名稱的方式。只有他得到“thread-1”、“thread-2”。我應該這樣做:if __name__ == '__main__':Thread(target = displayNums()).start()Thread(target = stam()).start()在這里看到: 讓 2 個函數同時運行現在,我想做的是同時運行 2 或 3 個線程,并獲得它們的名字。但我總是得到 MainThread 我的代碼:from threading import *def displayNums():    i = 0    print(current_thread().getName() , "suo")    while i <= 10:        print(i)        i+=1print(current_thread().getName())t = Thread(target=displayNums())def stam():    k = 0    print(current_thread().getName(), "sss")    while k <= 50:        print(k,"k")        k+=1if __name__ == '__main__':    Thread(target = displayNums()).start()    Thread(target = stam()).start()我沒有收到任何錯誤,但我得到了這個輸出:    MainThreadMainThread suo012345678910MainThread suo012345678910MainThread sss0 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14 k15 k16 k17 k18 k19 k20 k21 k22 k23 kand so on...
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

改變這個:


if __name__ == '__main__':

    Thread(target = displayNums()).start()

    Thread(target = stam()).start()

對此:


if __name__ == '__main__':

    Thread(target = displayNums).start()

    Thread(target = stam).start()

線程目標是函數本身,而不是函數的返回值。 stam()調用函數并返回其值,但stam它是函數對象本身。創建線程時,您需要函數本身,而不是其返回值。


編輯:當你想現在運行它時調用一個函數。您可以訪問它的返回值,例如x = f()將 f 的返回值賦給 x。在其他情況下,您現在不想運行函數,但您想跟蹤它以便以后調用它。線程就是這種情況。您不想運行該函數,而是想告訴線程構造函數在第二個線程中運行什么函數。因此,在這種情況下,您將函數本身作為參數傳遞。通常這意味著沒有任何括號的函數名稱。


Python 將函數視為任何其他對象。在 Python 中,您可以將一個函數分配給一個變量,然后從所有意圖和目的來看,該變量就是函數本身。它可以像原始函數一樣被調用(帶花括號),也可以傳遞給函數,或者其他什么。


嘗試這個:


# print is a function (built-in), and I can assign it to a variable

a = print

# Nothing gets printed yet

# the variable 'a' is now the same thing as the print function

a("Hello world")

這是一個愚蠢的例子,但在許多現實世界的情況下,這非常有用。


查看完整回答
反對 回復 2022-07-26
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

您的代碼實際上是在線程之外調用線程目標。將您的代碼編輯為:

if __name__ == '__main__':
    Thread(target = displayNums).start()
    Thread(target = stam).start()


查看完整回答
反對 回復 2022-07-26
  • 2 回答
  • 0 關注
  • 103 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號