gpt4 book ai didi

python - 为什么在简单用例中子类化 multiprocessing 的 BaseManager?

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:58 25 4
gpt4 key购买 nike

我的问题是关于 multiprocessing.Managers.BaseManager 的正确用法.文档中的主要示例展示了如何通过创建 BaseManager 的子类来自定义此类。如果有人这样做是为了修改或扩展 BaseManager 的行为,我可以理解。

但在网络上,甚至在 answer 中在 Stackoverflow 上,人们通过创建一个根本不改变 BaseManager 行为的子类来演示 BaseManager 的用法:

class MyManager(BaseManager): pass

我的问题是:在这种情况下这样做有什么意义?为什么不直接使用 BaseManager 和 BaseManager.register() 呢?我错过了什么吗?

编辑:我发现了更多例子:herehere .

最佳答案

BaseManager.register 是一个 classmethod .这意味着如果您在 BaseManager 实例上调用 register,您项目中的所有其他代码片段也将看到已注册的类型。如果其他代码片段之一试图做同样的事情,即使用与您相同的名称直接向 BaseManager 注册它们自己的类型,这就会成为一个问题。子类化 BaseManager 是避免这种情况的一种方法 namespace pollution .

如果您确定这个问题永远不会影响您 - 例如,如果您正在编写程序而不是库,并且您非常确定以后不会以某种方式扩展它这可能会破坏事情 - 然后使用 BaseManager.register 绝对没问题。 (请注意,尽管这种观点值得商榷。我认为这很好,因为我更喜欢务实的方法。另一种观点是,在你最终想要扩展你的程序时,你可能已经忘记了这个东西会坏,因此最好一开始就把它弄好..)

关于python - 为什么在简单用例中子类化 multiprocessing 的 BaseManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41084929/

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