メインオブジェクトで開始された後に独立して実行されるデーモンスレッドを作成しました。私はそれがスタックを介して実行したい様々な機能をプッシュすることができます。しかし、デーモンスレッドがスタック内に2つ以上の関数(ビルドしているプロジェクトの設計選択肢)を持つことは決してありません。したがって、run_this_functionというメソッドがこのスレッドで実行されていて、メインオブジェクトがその関数を再びスタックにプッシュすると、run_this_functionの途中で停止して、スレッドにプッシュされた新しい関数を再起動します。実行中の途中で一連のステートメントを停止する
私の質問は、一連のステートメントが開始された後にそれらを停止する方法があるかどうかです。
import threading
import time
class myThread(object):
"""
The run() method will be started and it will run in the background
until the application exits.
"""
def __init__(self, interval=1):
self.interval = interval
self.thread_stack = []
thread = threading.Thread(target=self.run, args=())
thread.daemon = True
thread.start()
def run(self):
# Method that runs forever
lock = threading.Lock()
while True:
if self.thread_stack:
lock.acquire()
try:
# if a method is already running on this thread, end it.
new_function = thread_stack.pop()
finally:
lock.release()
# run new function
else:
time.sleep(self.interval)
def some_function(self):
#do something
#do something
#do something else
#do one more thing
上記のコードはこれまでに書いたものです。 myThreadオブジェクトを作成し、thread_stackに実行したいメソッドをプッシュします。だからもし私がすでに実行している関数(some_function)があったら、最初の2つの実行ステートメントの後のように途中で中止することができます。すべての行についてif文を用意する必要がありますか?
また、私のスレッディングの使用方法についてもコメントしてください。私はまだそれに非常に新しいです。ありがとう!をスレッドを使用して作成さ
スレッドを殺すか、中断することは困難である::)
ご了承ください。実際にマルチプロセッシングの説明に役立ちますが、実際には(真のループ中に)停止しないスレッドを実装し、グローバルスタック(thread_stack)を実行する関数を追加していました。スレッドを閉じずにこれらの関数を終了する方法を知りたかったのです。しかし、私はすでにそれを考え出しました。 Thansk !! –
もしあなたがそれを理解したら、答えとして投稿してください。 – ErikR