現在、私はPython 3.4.3を使用しPyQt5アプリケーションを開発しています。pickle.dumpはGILのためにマルチスレッドのPythonアプリケーションのメインスレッドをブロックします
私のアプリには、QThreadがあり、スレッドによって大量のオブジェクト(100MB)が(pickle)ダンプされています。
しかし、そのオブジェクトをダンプするには1〜2秒かかり、GILのためにメインスレッドを約1〜2秒ブロックします。
どうすればこの問題を解決できますか(メインスレッドをブロックしないでください)?
私は文字列に私のオブジェクトをシリアライズすると、メインスレッドを時間がかかり、それはGILを必要とし、最終的にブロックすることを考える。(私が知っているように、ファイルへの書き込みはGILを必要としない)
私はCythonを使用して考えています、私はCythonの初心者なので、Cythonを使ってこの問題を解決するかどうかはわかりません。
この問題を回避する方法はありますか?
編集:私はmultiprocessing
モジュールを試しましたが、相互通信時間(プロセス間で共有メモリ変数を渡す)にも約1〜2秒かかるため、結局のところ利点はありません。
あなたのアプリはマルチスレッドであることが必須ですか?代わりにマルチプロキシを使用すると、GILを取り除くことができます。 –
@RicardoSilveiraマルチプロセッシングモジュールを試しましたが、プロセス間で共有メモリ変数を渡すのに1〜2秒かかるため、結果的に利点はありません。私は私の質問でそれを言及すべきだった。 – asqdf
多分[multiprocessing.sharedctypes](https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.sharedctypes) –