はい、Python のすべてのモジュールは常にグローバルです。または、より適切に言えば、シングルトンです。そうするとfrom twisted.internet import reactor
、Python のインポート メカニズムは最初に をチェックsys.modules['twisted.internet.reactor']
し、存在する場合はその値を返します。存在しない場合 (つまり、モジュールが初めてインポートされたとき) にのみ、モジュールが実際に初めてロードされます (sys.modules
将来のインポートの可能性のためにエントリに隠されます)。
Singleton 設計パターンには特に魔法のようなものはありませんが、アーキテクチャが「1 つしか存在できない」と宣言したものを複数必要とする場合、制限が生じることがあります。Twisted のドキュメントは次のことを認めています。
新しいアプリケーション コードは、参照を取得するためにこのモジュールをインポートできることに依存するのではなく、reactor を必要に応じてパラメーターとして受け渡しすることを優先する必要があります。これにより、単体テストが簡素化され、(パフォーマンスの向上として) 複数のリアクターのサポートが容易になる可能性がありますが、現時点ではこれは不可能です。
それを可能にする最善の方法は、それがあなたのアプリにとって重要である場合、ツイスト プロジェクトに貢献することです。労力 (1 つのアプリ内で複数のリアクター、つまり複数のイベント ループをサポートするために必要な微妙なメカニズムのコーディング) または資金のいずれかです。 (お金があれば、この仕事をするために、誰かを奨学金で支えることができます)。
それ以外の場合は、別々のプロセスを (multiprocessing
標準ライブラリのモジュールなどで) 使用し、それぞれに複数のリアクターを使用しないでください。