2016-12-11 18 views
2

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

但在网络上,甚至在#2人的answer证明BaseManager的通过创建子类的使用不改变BaseManager在所有的行为:

class MyManager(BaseManager): pass 

我的问题是:什么是在这种情况下指出这一点?为什么不直接使用BaseManager和BaseManager.register()?我错过了什么吗?

编辑:我发现更多的例子:herehere

回答

1

BaseManager.registerclassmethod。这意味着如果您在BaseManager实例上调用注册,项目中的所有其他代码片段也会看到注册类型。如果其他代码片段中的一个试图执行相同的操作,即直接在BaseManager上注册自己的类型,则使用相同的名称。子类BaseManager是避免这种namespace pollution的一种方法。

如果你确定这个问题永远不会影响你 - 例如,如果你正在编写一个程序,而不是一个库,而且你确信你以后不会延长它方式可能会破坏的东西 - 然后使用BaseManager.register是绝对好的。 (注意这个观点是有争议的,我认为这很好,因为我更喜欢实用的方法;另一种观点是,在你最终想要扩展你的程序,你可能已经忘记了这个会破坏的东西,因此它是一个好主意,使其在第一个地方..)

+0

谢谢。现在我明白了它背后的动机。 – ThoWe

相关问题