2016-10-05 5 views
1

私はPython 2.7を使用しており、スレッディングには新しくなっています。私はクラスファイルを取得し、メソッドを実行します。しかし、スレッドのインスタンスを作成するときに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

関連する問題