Tho*_*oWe 6 python multiprocessing python-2.7
我的问题是关于multiprocessing.Managers.BaseManager的正确用法。文档中的主要示例展示了如何通过创建 BaseManager 的子类来自定义此类。我可以理解是否有人这样做是为了修改或扩展 BaseManager 的行为。
但在网上,甚至在 Stackoverflow 上的一个答案中,人们通过创建一个根本不改变 BaseManager 行为的子类来演示 BaseManager 的用法:
class MyManager(BaseManager): pass
Run Code Online (Sandbox Code Playgroud)
我的问题是:在这种情况下这样做有什么意义?为什么不直接使用 BaseManager 和 BaseManager.register() 呢?我错过了什么吗?
BaseManager.register是一个类方法。这意味着,如果您在实例上调用 register BaseManager,项目中的所有其他代码段也将看到注册的类型。如果其他代码片段之一试图做同样的事情,即BaseManager使用与您相同的名称直接向 注册自己的类型,这就会成为一个问题。子类化BaseManager是避免这种名称空间污染的一种方法。
如果您确定这个问题永远不会影响您 - 例如,如果您正在编写一个程序而不是一个库,并且您非常确定以后不会以某种可能会破坏它的方式扩展它东西 - 那么使用BaseManager.register绝对没问题。(请注意,尽管这种观点是有争议的。我认为这很好,因为我更喜欢务实的方法。另一种观点是,当你最终想要扩展你的程序时,你可能已经忘记了这个会破坏的东西,并且因此,最好首先把它做好......)