在 init 方法中启动线程是一个坏主意吗?

研发计划

我有一个类,它就像一个队列,我在其中创建了一个工作线程。该工作线程将负责处理队列中的每个项目。

由于此类的实例应始终具有工作线程,因此我正在 init 方法本身中创建并启动工作线程。

我想知道这样做是否是一种不好的做法。

例如

class CustomQueue:

    def __init__(self):
        # some initialization
        self.worker = threading.Thread(target=sometarget)
        self.worker.start()
FMc

我不知道我是否会说这是不好的做法,但我的第一直觉是避免构造函数中的所有副作用:不要与数据库交谈,不要与文件系统交互,不要不要发出 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在已经运行git init的文件夹的子文件夹中进行git init是一个坏主意?

将实例传递给__init__。这是一个好主意吗?

__init__是一个类方法吗?

在C中创建一个通用的“函数指针”联合是一个坏主意吗?

给用户sudo访问perl是一个坏主意吗?

捕获OutOfMemoryError是一个坏主意吗?

匿名类实例----这是一个坏主意吗?

使/ etc目录只读只是一个坏主意吗?

包装System.Math是一个坏主意吗?

使 ef core DbContext 瞬态是一个坏主意吗?

在适配器内写下太多方法是一个坏主意吗?

将django基类包装到中间类中是一个坏主意吗?

在Hadoop中,对表进行过时分区是一个坏主意吗?

将脚本保留在/ root中是一个坏主意吗?

SQL表中的通用ID列是一个坏主意吗?

在包的“ init()”函数中加入for循环-好还是坏主意?

为什么在init()一个servlet的方法在不同的线程上运行?

以另一个用户/组的身份启动进程(在init.d脚本中)

挂毯中的init()方法

复制一个迭代器是一个坏主意吗?

有一个包含外键的复合主键是一个坏主意吗?

用猴子修补对象以更自然的方式测试元素是否在数组中是一个坏主意吗?

在诸如AppRoot中的快餐栏之类的反应全局组件中使用CustomEvent是一个坏主意吗?

使用正则表达式对字符串中的特定字母计数是一个坏主意吗?

React:将子组件作为this.child存储在父构造函数中-这是一个坏主意吗?

Go中的变量init

在init()中验证环境

__init__中的UnboundLocalError

在Node / Express服务器中使用async / await是一个坏主意吗?