私は、数百の異なる問題シナリオでソルバーを実行する、より大きなサイズの Python アプリケーションに取り組んでいます。ユーザーがソルバー構成をセットアップできる GUI があります。これを高速化するために、マルチプロセッシング プールを実装して、アプリケーション内でソルバー モジュールの新しいインスタンスを生成しました。
最終的に何が起こるかというと、プールの作成中に GUI の 4 つの新しいコピーが表示されるということです。プログラミング ガイドラインに従って、アプリケーションのエントリ ポイントを保護するための適切な手順を実行しましたが、マルチプロセッシング モジュールに関する基本的なことを誤解している可能性があります。
このスレッドのガイドラインに従って、最小限のスタートアップ モジュールを作成しました。
ScenarioSolver.solveOneScenario はソルバーの新しいインスタンスを作成し、scenarios_to_solve は引数のリストです。
process_pool = multiprocessing.Pool(4)
for _, result in enumerate(process_pool.imap_unordered(ScenarioSolver.solveOneScenario, scenarios_to_solve)):
self.processResult(result)
ここにある限られた情報に基づいて、Pool を使用する際に見落としていた可能性があるものは何ですか?
編集:この動作は、py2exe を使用してアプリケーションを実行可能ファイルにパッケージ化した場合にのみ発生します。日食から実行すると、意図した動作が得られます。