猿问

为什么 current_thread() 总是返回 MainThread?

我开始在 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+=1

print(current_thread().getName())

t = Thread(target=displayNums())



def stam():

    k = 0

    print(current_thread().getName(), "sss")

    while k <= 50:

        print(k,"k")

        k+=1




if __name__ == '__main__':

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

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

我没有收到任何错误,但我得到了这个输出:


    MainThread

MainThread suo

0

1

2

3

4

5

6

7

8

9

10

MainThread suo

0

1

2

3

4

5

6

7

8

9

10

MainThread sss

0 k

1 k

2 k

3 k

4 k

5 k

6 k

7 k

8 k

9 k

10 k

11 k

12 k

13 k

14 k

15 k

16 k

17 k

18 k

19 k

20 k

21 k

22 k

23 k

and so on...


慕婉清6462132
浏览 94回答 2
2回答

慕工程0101907

改变这个:if __name__ == '__main__':&nbsp; &nbsp; Thread(target = displayNums()).start()&nbsp; &nbsp; Thread(target = stam()).start()对此:if __name__ == '__main__':&nbsp; &nbsp; Thread(target = displayNums).start()&nbsp; &nbsp; 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 variablea = print# Nothing gets printed yet# the variable 'a' is now the same thing as the print functiona("Hello world")这是一个愚蠢的例子,但在许多现实世界的情况下,这非常有用。

青春有我

您的代码实际上是在线程之外调用线程目标。将您的代码编辑为:if&nbsp;__name__&nbsp;==&nbsp;'__main__': &nbsp;&nbsp;&nbsp;&nbsp;Thread(target&nbsp;=&nbsp;displayNums).start() &nbsp;&nbsp;&nbsp;&nbsp;Thread(target&nbsp;=&nbsp;stam).start()
随时随地看视频慕课网APP

相关分类

Python
我要回答