为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 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 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号