2017-10-25 9 views
1

スレッドクラスを実行すると、それぞれのスレッドが2つのスレッドを開始し、それぞれの目的があり、キューを使用して通信します。これらのスレッドのPythonのオブジェクト内の別のスレッドからのスレッドの開始

一つは、私はこれは悪いデザインかもしれません知っている、いくつかのものを処理するために、より多くのスレッドを生成しますが、彼女は私がスレッドを見つめてみました

class MyThread(Thread): 
    def __init__(self): 
    # stuff 
    Thread.__init__(self) 

    def run(self): 
    # some code that start a thread, this one starts fine 

    # another thread started here and went fine 
    processing_thread = Thread(target=self.process_files()) 
    processing_thread.daemon = True 
    processing_thread.start() 
    # more code 

def process_files(self): 
    while True: 

     # stuff 
     self.publish(file) 
     # stuff 

def publish(self, file): 
    # more code 
    if (condition): 
    self.semaphore.acquire(blocking=True) 
    # HERE IT BREAKS 
    thread = Thread(target=self.process(), args=(satellite, time,)) 
    thread.daemon = True 
    thread.start() 

def process(self, satellite, time): 
    #interpreter does not reach here 

私のコードです:

args=(satellite, time,) 
args=(satellite, time) 
args=(self, satellite, time,) 
args=(self, satellite, time) 

私はいつも、エラーメッセージ、私が行方不明、または引数をこのように渡すことも可能ですしています何TypeError: process() takes exactly 3 arguments (1 given)

を取得しますか?

+1

self.process後に括弧を削除してください:スレッド=スレッド(対象= self.process、引数=(衛星、時間、)) – KulaDamian

答えて

1

最初のコメントは正しいです。

あなたは、パラメータとして渡す、あなたがprocessを呼び出しているスレッド

thread = Thread(target=self.process(), args=(satellite, time,)) 

を構築していません。これは、関数自体ではなく、スレッドにprocess()の結果を渡そうとしていることを意味します。

関連する問題