gpt4 book ai didi

python - 给定可停止的伪原子工作单元,在 Python 中创建可停止线程的 "correct"方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 18:08:46 24 4
gpt4 key购买 nike

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

最佳答案

标志检查似乎是正确的,但您错过了通过使用原子列表来简化它的机会。如果将原子放在列表中,则可以使用单个 for 循环而不需要 do_atom() 方法,并且在哪里进行检查的问题自行解决。

def run(self):
atoms = # get atoms
for atom in atoms:
if self.stop_at_next_check:
break
self.current_atom = atom
atom.do_work()

关于python - 给定可停止的伪原子工作单元,在 Python 中创建可停止线程的 "correct"方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13125276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com