2

私の問題はもちろんGILです。データを分析している間、間にいくつかのプロットを表示するといいでしょう (結果を待つのが退屈ではありません)。

しかし、GIL はこれを防ぎます (そして、そもそも Python がそんなに良い考えだったのかと自問自答するところまで来ています)。

プロットを表示することしかできず、ユーザーが閉じてから計算を開始するまで待ちます。明らかに時間の無駄。

サブプロセス モジュールとマルチプロセッシング モジュールは既に試しましたが、うまく動作しないようです。

これについて何か考えはありますか?ありがとう

編集:わかりましたので、GILではなくshow()です。

4

4 に答える 4

5

これは、matplotlib や GIL の問題ではありません。

matplotlib では、アプリケーションが他の処理を続けている間、必要な数の Figure を開いて画面に表示できます。

インタラクティブ モードで matplotlib を使用する必要があります。これはおそらくあなたの問題です。

from matplotlib import interactive
interactive(True)

これはインポートの一番上にあるはずです

于 2010-04-30T13:07:23.247 に答える
3

これは GIL とは関係ありません。分析コードを変更して、グラフを時々更新するようにします (たとえば、N 回の反復ごと)。

その後、グラフを描画すると分析コードが非常に遅くなることがわかった場合にのみ、グラフ更新コードをマルチプロセッシングのサブプロセスに入れます。

于 2010-04-30T12:53:58.687 に答える
3

組み込みの show コードに頼るのではなく、グラフを適切な Windowing システムに入れる必要があると思います。

.show() を別のスレッドに貼り付ければ十分でしょうか?

GIL は関係ありません。ブロックする show() 呼び出しがあるため、最初にそれを処理する必要があります。

于 2010-04-30T13:05:15.050 に答える
2

draw() メソッドは show() の必要性を回避できるようです。

スクリプトで .show() に残された唯一の理由は、スクリプトが最後に達したときに画像が消えないように、ブロック部分を実行させることです。

于 2010-04-30T13:44:21.993 に答える