で失敗しますパラメータについては、チュートリアルのhttp://zqdevres.qiniucdn.com/data/20150702120338/index.htmlを参照してください。pyInstallerの内蔵のWindows EXEは、私は次のように複数のプロセスを作成するために、Pythonのmultiprocessing.Poolライブラリを使用していmultiprocessing.pool
プロジェクトはPyInstaller 3.1.1を使用して単一のWindows EXEにパッケージングされています。 --onedirオプションを付けてください。 PyInstallerは問題なくEXEを作成します。問題なくマルチスレッドを使用しないプログラムの部分を実行できます。
上記のマルチプロセッシング機能を使用するプログラムの一部を実行しようとすると、私の問題が発生します。その後、プログラムは、(それぞれの子スレッドでオーバー上書きして)次のエラーメッセージで失敗します
:File "multiprocessing\context.py", line 148, in freeze_support
File "multiprocessing\spawn.py", line 74, in freeze_support
File "multiprocessing\spawn.py", line 106, in spawn_main
File "multiprocessing\spawn.py", line 115, in _main
File "multiprocessing\spawn.py", line 221, in prepare
File "multiprocessing\context.py", line 231, in set_start_method
RuntimeError: context has already been set
classifier_v3_gui returned -1
freeze_supportはメインが最初の行に呼び出しが含まれている必要がありhttps://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessingからの提案、として来ます同様の問題がPyInstaller-built Windows EXE fails with multiprocessingで議論し、しかし、a)は--onedirについて議論し解決策は、あなたがエラーから見ることができるように、私のために動作するようには思えない、上記のリンクにある溶液を意味している
if name == "__main__":
multiprocessing.freeze_support()
私が得るメッセージ、b)私は_PopenがPool-ingにどのように関連しているかわからないので、--onefileの場合、私はどのようにしてクラスの再定義を実装します。
mainでmultiprocessing.freeze_support()を使用しないと、RuntimeErrorが起こらないという点でプログラムが動作する代わりに、cmdに何度も印刷されたプログラムの使用方法が何度も表示されます。 EXE自体を呼び出そうとしている生成されたプロセスのうち、明らかに何が起こるべきかはわかりません。
言うまでもなく、プログラムは.pyスクリプトとして問題なく実行されます。
私は私が考えることができる唯一の他のソリューションは、マルチプロセッシングを使用するように私の解決策を書き換えることであるのWindows 10上の32ビットのPython 3.4(同様のPython 2.7と同じマルチスレッドの問題があった)
を使用しています。マルチプロセッシングの代わりにプロセス。プール、修正があるようです。私のプール機能がやっていることをやる努力がかなり少ない場合は、それを解決します。
こんにちは@Mjellmaさん、あなたの質問に答えてください。私はあなたがこのエラーを処理できることを理解しています。 – mathiasfk