停止可能なスレッドを作成するには、hereというポストされた解決策があります。しかし、私はいくつかの問題をこのソリューションを実装する方法を理解している。コードを使用してPython - どうすれば '停止可能な'スレッドを実装できますか?
...
import threading
class StoppableThread(threading.Thread):
"""Thread class with a stop() method. The thread itself has to check
regularly for the stopped() condition."""
def __init__(self):
super(StoppableThread, self).__init__()
self._stop_event = threading.Event()
def stop(self):
self._stop_event.set()
def stopped(self):
return self._stop_event.is_set()
は、どのように私は1秒ごとに端末にプリント「こんにちは」機能を実行するスレッドを作成することができます。 5秒後に.stop()を使用してループ関数/スレッドを停止します。
もう一度この解決策を実装する方法を理解するのに苦労しています。
import threading
import time
class StoppableThread(threading.Thread):
"""Thread class with a stop() method. The thread itself has to check
regularly for the stopped() condition."""
def __init__(self):
super(StoppableThread, self).__init__()
self._stop_event = threading.Event()
def stop(self):
self._stop_event.set()
def stopped(self):
return self._stop_event.is_set()
def funct():
while not testthread.stopped():
time.sleep(1)
print("Hello")
testthread = StoppableThread()
testthread.start()
time.sleep(5)
testthread.stop()
上記のコードは、testthread.stop()コマンドで停止できるスレッドtestthreadを作成します。私はこれが空のスレッドを作成していると理解しています... funct()を実行するスレッドを作成する方法はありますか、スレッドは.stop()を使用すると終了します。基本的には、スレッドとしてfunct()関数を実行するためにStoppableThreadクラスを実装する方法がわかりません。
通常のねじ切り機能の例...
import threading
import time
def example():
x = 0
while x < 5:
time.sleep(1)
print("Hello")
x = x + 1
t = threading.Thread(target=example)
t.start()
t.join()
#example of a regular threaded function.
イベントに応じてスレッド内で何か処理を行う必要があります。たとえば、繰り返しごとに 'self.stopped'をチェックします。あなたがそうしない限り、スレッドは魔法のように動作を停止しません。 –
testthread.stopped()ではないのですか? –
スレッドを拡張したり、実行するタスクを渡すことはありません。あなたは 'funct'が動くと思いますか? –