私は2つのメソッドrun()
とrun_forever()
を持っています。後者は前者を繰り返し呼び出します。別のスレッドでクラスのインスタンスごとにrun_forever()
を実行したいと思いますが、これまでのところ、threading.Thread
のデフォルトの動作であるrun()
を逸脱することはできませんでした。ここでthreading.Threadのstart()メソッドはrun()以外のメソッドを呼び出します
は私が達成しようとしているものの簡易版である:
import time
import threading
class Controller(object):
def run(self):
print("Running once...")
def run_forever(self):
while True:
self.run()
time.sleep(1)
class ThreadController(Controller, threading.Thread):
def __init__(self, *args, **kwargs):
Controller.__init__(self, *args, **kwargs)
threading.Thread.__init__(self, target=self.run_forever)
if __name__ == "__main__":
thread_controller = ThreadController()
thread_controller.start()
thread_controller.join()
私はこのスクリプトを実行すると、それは一度Running once...
を印刷し、私はにより意図のようにそれを毎秒を印刷し続けませんtarget=self.run_forever
をthreading.Thread
の初期化に設定します。どのように私はこのコードを変更して、望ましい動作を達成することができますか? Controller
から継承
なぜあなたは 'run_forever'を持っていますか?ループを 'run'に入れることはできませんか? – Gabriel
.start()を使ってみてください。 –
Controller APIをThread APIにミックスしようとしていますが、メソッド名が衝突するため、動作しません。コントローラを変更できない場合は、コントローラを含むスレッドオブジェクトを解決する必要があります。簡単な方法は 'threading.Thread(target = Controll()。run_forever)'です。 – tdelaney