私はPythonでスレッド化されたプログラムを書いています。このプログラムは、ユーザー (CRTL+C) の操作や、さまざまなシグナルを送信する他のプログラムによって頻繁に中断されます。これらはすべて、さまざまな方法でスレッド操作を停止する必要があります。スレッドは一連の作業単位 (私は「アトム」と呼んでいます) を順番に実行します。
各アトムは迅速かつ安全に停止できるため、スレッド自体を停止させることはかなり簡単ですが、私の質問は次のとおりです。終わり?
stop_at_next_check
各アトムの前にフラグをポーリングする必要がありますか (以下の例)。フラグチェックを行うもので各アトムを装飾する必要がありますか (基本的には例と同じですが、デコレーターに隠されています)。それとも、思いもよらなかった他のテクニックを使用する必要がありますか?
例 (単純な停止フラグのチェック):
class stoppable(Thread):
stop_at_next_check = False
current_atom = None
def __init__(self):
Thread.__init__(self)
def do_atom(self, atom):
if self.stop_at_next_check:
return False
self.current_atom = atom
self.current_atom.do_work()
return True
def run(self):
#get "work to be done" objects atom1, atom2, etc. from somewhere
if not do_atom(atom1):
return
if not do_atom(atom2):
return
#...etc
def die(self):
self.stop_at_next_check = True
self.current_atom.stop()