我有一个类,它就像一个队列,我在其中创建了一个工作线程。该工作线程将负责处理队列中的每个项目。
由于此类的实例应始终具有工作线程,因此我正在 init 方法本身中创建并启动工作线程。
我想知道这样做是否是一种不好的做法。
例如
class CustomQueue:
def __init__(self):
# some initialization
self.worker = threading.Thread(target=sometarget)
self.worker.start()
我不知道我是否会说这是不好的做法,但我的第一直觉是避免构造函数中的所有副作用:不要与数据库交谈,不要与文件系统交互,不要不要发出 Web 请求,并且不要启动进程或线程。只要有可能,对象实例化就应该是一种廉价、轻量级的操作。
当涉及到测试和调试时,这条通用规则特别有用。例如,想象这个场景:
class CustomQueue:
def __init__(self):
# Side effects here...
def fubb(self, x, y):
...
如果您想进行单元测试fubb()
,或者可能在 Python REPL 中与其交互,那么必须考虑所有这些副作用是相当烦人的。
大多数规则都有例外,如果此类立即采取行动确实有意义,一种解决方法是添加一个可选参数来支持您的测试/调试用例。例如:
class CustomQueue:
def __init__(self, lightweight = False):
if not lightweight:
# Side effects here...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句