我正在用 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()