2016-12-11 12 views
2

私の質問はmultiprocessing.Managers.BaseManagerの正しい使い方についてです。ドキュメントの主な例は、BaseManagerのサブクラスを作成してこのクラスをカスタマイズする方法を示しています。 BaseManagerの動作を変更または拡張するために誰かがこれを行うかどうかを理解できます。単純なユースケースでマルチプロセッシングのBaseManagerをサブクラス化するのはなぜですか?

しかし、ネット上でもanswerでのStackOverflowの人々に全くBaseManagerの動作を変更しないサブクラスを作成することによりBaseManagerの使用方法を示しています

class MyManager(BaseManager): pass 

を私の質問は:何がそのような場合にその点を指摘しますか?なぜBaseManagerとBaseManager.register()を直接使用しないのですか?何か不足していますか?

編集:さらに多くの例が見つかりました:hereおよびhereです。

答えて

1

BaseManager.registerは、classmethodです。つまり、BaseManagerインスタンスで登録を呼び出すと、プロジェクト内の他のすべてのコードにも登録されたタイプが表示されます。これは、他のコードのいずれかが同じことをしようとした場合、つまり自分と同じ名前を使用してBaseManagerで直接自分のタイプを登録しようとすると問題になります。サブクラス化BaseManagerはこれを避ける方法ですnamespace pollution

この問題があなたに何の影響も与えないことが確かな場合 - 例えばプログラムを書いていてライブラリではなく、後でそれをいくつか拡張することは間違いない方法を破る可能性があります - BaseManager.registerを使用しても問題ありません。別の見解では、の時点で、が最終的にあなたのプログラムを拡張したいと思っているとき、あなたはおそらくこのことを忘れてしまったでしょうそれで、最初に正しいものにするのは良い考えです。)

+0

ありがとう。今私はそれの背後にある動機を理解しています。 – ThoWe

関連する問題