Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这里的_MainThread对于thread.run()意味着什么?_Python_Multithreading - Fatal编程技术网

Python 这里的_MainThread对于thread.run()意味着什么?

Python 这里的_MainThread对于thread.run()意味着什么?,python,multithreading,Python,Multithreading,下面是一个python代码片段 import threading class myThread(threading.Thread): def __init__(self, threadID, name, counter): threading.Thread.__init__(self) self.threadID = threadID self.name = name

下面是一个python代码片段

import threading

class myThread(threading.Thread):
        def __init__(self, threadID, name, counter):
                threading.Thread.__init__(self)
                self.threadID = threadID
                self.name = name
                self.counter = counter

        def run(self):
                currentTreadname = threading.currentThread()
                print "running in", currentTreadname
让我们阅读实例类

thread = myThread(1,"mythrd",1)
并在其中调用run方法

thread.run()
running in <_MainThread(MainThread, started 139982993762048)>
1.这里有两个对象,例如我的示例,第一个可调用对象意味着
\u MainThread

中对象构造函数的第二个对象是myThread的构造函数,对不对?
2.为什么子类中的run方法可以调用父类

thread.run()
running in <_MainThread(MainThread, started 139982993762048)>
thread.run()
磨合

thread是子类myThread(1,“mythrd”,1)的实例,为什么thread.run()要撤销一个_MainThread

应该调用Thread.start()方法

输出为:

running in <myThread(mythread, started 140140930873088)>
target是run()方法调用的可调用对象。默认为“无”,表示不调用任何内容

可调用对象是您传递给它的目标参数。关于这方面的更多信息,您可以参考

以及为什么您的代码在运行时打印

因为您没有调用
Thread.start
方法,所以它不会启动新线程。因此,如果您只调用
myThread.run
,它只是一个普通的对象方法调用。它在主线程中被调用。所以它会打印出来。

我想你应该按照上面的答案来做,如果你想正确使用线程,我试着提供你想要的答案:
_MainThread是线程模块中的一个类。您可以很容易地检查变量currentTreadname的类型,如下所示:

class myThread(threading.Thread):
    def __init__(self, threadID, name, counter):
            threading.Thread.__init__(self)
            self.threadID = threadID
            self.name = name
            self.counter = counter

    def run(self):
            currentTreadname = threading.currentThread()
            print("running in", type(currentTreadname))
thread = myThread(1,"mythrd",1)
thread.run()  
输出:

running in <class 'threading._MainThread'>
正在运行

标准run()方法调用作为目标参数传递给对象构造函数的可调用对象。在我的示例中有两个对象,第一个可调用对象表示
\u MainThread
?“to The object's constructor”中的第二个对象表示
myThread
,对不对?它可以说是一种特殊类型的伪线程(不是由python创建的线程)。如果线程是由调用Python的C库创建的,则可以创建额外的虚拟线程;它们将是
线程类型。
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
class myThread(threading.Thread):
    def __init__(self, threadID, name, counter):
            threading.Thread.__init__(self)
            self.threadID = threadID
            self.name = name
            self.counter = counter

    def run(self):
            currentTreadname = threading.currentThread()
            print("running in", type(currentTreadname))
thread = myThread(1,"mythrd",1)
thread.run()  
running in <class 'threading._MainThread'>