2016-10-05 2 views
1

Ich benutze Python 2.7 und neu zu Threading. Ich habe eine Klassendatei und run Methode. Aber ich sehe nicht die run-Methode aufgerufen, wenn ich Instanzen von Thread erstellen. Ich plane auch, subprocess.Popen innerhalb der run Methode zu verwenden und stdout des Prozesses für jeden Dateinamen zu erhalten und die Ausgabe zu drucken.Threading mit Subprozess

Bitte sagen Sie mir, was mir hier fehlt für run Methode aufgerufen werden.

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

Ich habe versucht, das auch (x.start()), aber run-Methode nicht aufgerufen wird. Gibt es eine andere Syntax für Python 2.7? –

Antwort

4

Sie vergessen, den Konstruktor der Mutterklasse zu benennen, um das Ziel anzugeben. Es ist nicht Java, und run hat keine besondere Bedeutung. Standardmäßig ist das Ziel None und der Thread tut nichts.

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

Dies wird tun, was Sie wollen. Sie rufen __init__ nicht aus der Klasse Thread auf.

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") 

Ich glaube nicht, dass Sie Ziel Argument zu übergeben haben. Zumindest tue ich das normalerweise nicht.

Ausgang:

In File Scan Thread 
myfile.txt 
+0

Richtig, Sie wollen nur 'target' verwenden, wenn der Thread eine externe Funktion ausführen soll. In diesem Fall ist die Klasseninstanz der Thread. – tdelaney