4

私は Python のグローバル インタープリター ロックが大好きです。なぜなら、基になる C コードが単純になるからです。ただし、これは、各 Python インタープリターのメイン ループが一度に 1 つのスレッドに制限されることを意味します。最近、プロセッサ チップあたりのコア数が頻繁に 2 倍になっているため、これは悪いことです。

zeromq の想定される利点の 1 つは、マルチスレッド プログラミングが「簡単」またはより簡単になることです。

同じプロセスで複数の Python インタープリターを起動し、他の共有状態を使用せずにインプロセス zeromq のみを使用して通信させることは可能ですか? 誰も試したことがありますか?うまくいきますか?コメントおよび/またはリンクを提供してください。

4

1 に答える 1

4

単一のプロセス内でPythonインタープリターの複数のインスタンスを作成する方法はわかりませんが、複数のインスタンスを複数のプロセスに分割し、と通信した経験はありますzmq

私は、島間の通信を管理multiprocessingするために、グローバル最適化のための島モデルアーキテクチャを実装するために使用してきました。zmq各アイランドは、マスター群島プロセスによって作成および管理される独自のPythonインタープリターを備えた独自のプロセスです。

を使用multiprocessingすると、必要な数の独立したPythonインタープリターを起動できますが、それらはすべて、個別のメモリスペースを持つ独自のプロセスに存在します。OSスケジューラは、コアへのプロセスの割り当てとCPU時間の共有を処理すると思います。個別のメモリスペースは、明示的に通信する必要があることを意味するため、最も難しい部分です。zmqプロセス間で通信するには、バイト文字列を送信するため、送信するオブジェクト/データはシリアル化可能である必要があります。

良い点zmqは、ネットワーク上に分散されたシステム間で拡張できることであり、非常に軽量です。REP / REQ、PUB / SUBなどを使用して、ほぼすべての通信パターンを作成できます。

しかし、いいえ、threadingモジュールからいくつかのスレッドをスピンアップするほど簡単ではありません。

編集:また、これはあなたと同様のスタックオーバーフローの質問です。内部には、単一のプロセス内で複数のPythonインタープリターを実行できる可能性があることを示す、より関連性の高いリンクがいくつかありますが、単純には見えません。 C /C++プログラムから呼び出された複数のオペレーティングシステムスレッド上の複数の独立した組み込みPythonインタープリター

于 2012-04-04T18:55:33.987 に答える