2016-10-05 68 views
1

我使用Python 2.7和新的线程。我有一个类文件和运行方法。但是当我创建线程实例时,我看不到调用的run方法。我也计划在run方法内使用subprocess.Popen,并为每个文件名获得stdout进程并打印输出。线程与子进程

请告诉我我在这里丢失了什么run方法被调用。

class FileScanThread(threading.Thread): 
    def __init__(self, myFileName): 
     print("In File Scan Thread") 
     self.mapFile = myFileName 
     #myjar=myFileName 
     self.start() 

    def run(self): 
     print self.mapFile 

    x= FileScanThread("myfile.txt") 
+0

我想,太(x.start()),但run方法不会被调用。 python 2.7有没有不同的语法? –

回答

4

你忘记调用母类构造函数来指定目标。这不是java,并且run没有特别的意义。默认情况下,目标是None,线程不执行任何操作。

import threading 

class FileScanThread(threading.Thread): 
    def __init__(self, myFileName): 
     threading.Thread.__init__(self,target=self.run) 
     # another syntax uses "super", which is simpler in python 3 
     # super().__init__(target=self.run) 

     print("In File Scan Thread") 
     self.mapFile = myFileName 
     #myjar=myFileName 
     self.start() 

    def run(self): 
     print(self.mapFile) 

x= FileScanThread("myfile.txt") 

x.join() # when you're done 
1

这会做你想做的。您不会从Thread类中调用__init__

class FileScanThread(threading.Thread): 
    def __init__(self, myFileName): 
     threading.Thread.__init__(self) 
     print("In File Scan Thread") 
     self.mapFile = myFileName 
     #myjar=myFileName 
     self.start() 

    def run(self): 
     print self.mapFile 

x = FileScanThread("myfile.txt") 

我不认为你必须将目标参数传递给它。至少我通常不会这样做。

输出:

In File Scan Thread 
myfile.txt 
+0

对,如果你想让线程运行一个外部函数,你只想使用'target'。在这种情况下,类实例就是线程。 – tdelaney