1

私はこのようなものを持っています:

class thread1(threading.Thread):
    def __init__(self):
        file = open("/home/antoni4040/file.txt", "r")
        data = file.read()
        num = 1
        while True:
           if str(num) in data:
               clas = ExportToGIMP
               clas.update()
           num += 1     
thread = thread1
        thread.start()
        thread.join()

そして、私はこのエラーを受け取ります:

TypeError: start() takes exactly 1 argument (0 given)

なんで?

4

2 に答える 2

5

thread = thread1である必要がありますthread = thread1()。それ以外の場合は、クラスの実際のインスタンスではなく、クラスのメソッドを呼び出そうとしています。


また、作業__init__を行うためにThreadオブジェクトをオーバーライドしないでください-override run

(セットアップを行うためにオーバーライドすることはできます__init__が、それは実際にはスレッドで実行されないため、呼び出す必要がありますsuper()。)


コードは次のようになります。

class thread1(threading.Thread):
    def run(self):
        file = open("/home/antoni4040/file.txt", "r")
        data = file.read()
        num = 1
        while True:
           if str(num) in data:
               clas = ExportToGIMP
               clas.update()
           num += 1     

thread = thread1()
        thread.start()
        thread.join()
于 2012-10-29T20:11:11.510 に答える
3

あなたが書くとき

thread = thread1

threadクラスに割り当てているthread1、つまり。threadの同義語になりthread1ます。このため、次に書き込むthread.start()と、そのエラーが発生します-渡さずにインスタンスメソッドを呼び出していますself

実際に必要なのは、インスタンス化する thread1ことです。

thread = thread1()

したがってthread、のインスタンスになり、そのthread1上で。のようなインスタンスメソッドを呼び出すことができますstart()

ちなみに、正しい使用方法は、コンストラクターではなく、メソッド(別のスレッドで実行されるコードを記述する場所threading.Thread)をオーバーライドすることです。run

于 2012-10-29T20:11:41.617 に答える