matplotlibの図形を作成した後、メモリを解放するにはどうすればよいですか?
質問
いくつかのdjango-celeryタスクに、いくつかのmatlpotlibの関数を組み込んでいます。
タスクが呼び出されるたびに、より多くの RAM が python に割かれます。あまり時間が経たないうちに、python はすべての RAM を占有してしまいます。
QUESTION。 このメモリを解放するにはどうしたらよいでしょうか?
UPDATE 2 - 第二の解決策。
matplotlibのエラー時にメモリがロックされることについて具体的に同様の質問をしたのですが、この質問に対して良い回答が得られました
.clf()
,
.close()
そして
gc.collect()
は、プロセスが終了すると自動的にメモリが解放される別のプロセスでプロット機能を実行するために、マルチプロセスを使用する場合は必要ありません。
Matplotlibのエラーはメモリリークになります。どうすればそのメモリを解放できますか?
UPDATE - 解決策です。
これらのstackoverflowの投稿は、私が以下のコマンドでmatplotlibオブジェクトによって使用されるメモリを解放することができることを示唆しました。
.clf()
:
Matplotlib がループで描画するときにメモリ不足になる
.close()
:
Python matplotlib: 図形の大きさを指定したときにメモリが解放されない
import gc
gc.collect()
以下は、この解決策をテストするために使用した例です。
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from pylab import import figure, savefig
import numpy as np
import gc
a = np.arange(1000000)
b = np.random.randn(1000000)
fig = plt.figure(num=1, dpi=100, facecolor='w', edgecolor='w')
fig.set_size_inches(10,7)
ax = fig.add_subplot(111)
ax.plot(a, b)
fig.clf()
plt.close()
del a, b
gc.collect()
どのように解決するのですか?
タスク関数を何度か (for で) 実行して、celery に関係なく関数がリークしていないことを確認しましたか? django.settings.DEBUG が False になっていることを確認してください (DEBUG=True のとき、接続オブジェクトは全てのクエリーをメモリに保持します)。
関連
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pythonの文字列書式をリストで使う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] if 節の終了方法
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。