1

私は、数百の異なる問題シナリオでソルバーを実行する、より大きなサイズの 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 を使用してアプリケーションを実行可能ファイルにパッケージ化した場合にのみ発生します。日食から実行すると、意図した動作が得られます。

4

1 に答える 1

0

これは、このスレッドで解決されたのと同じ問題です。

この問題を解決したmultiprocessing.freeze_support()直後に追加します。if __name__ == '__main__'

于 2012-05-09T13:42:52.197 に答える