質問: 'bq rm -f '+(BigQueryのテーブル名) subprocess.call(cmd, shell=True) <試したこと> del df gc.collect() ⇒メモリ解放してみたがエラー。各変数の使用メモリを調べ、大きな容量の変数を全て削除し、同様のことを行ったが同じ結果。 subprocess.call('ls') ⇒同じエラー。コマンドの内容には左右されないことが分かる。 この状態で別のターミナルでログインし、pythonを起動した後、 すぐに下記を実行(pandasでデータを取得する処理をパスし。cmdの値は代入した) subprocess.call(cmd) ⇒正常に実行された。 恐らく、pythonのメモリはgc.collect()で解放されたけど、 subprocessを呼び出すのに必要なC側のメモリが解放されていないのだと思います。 df_insert.to_csvがCで実行されており、その時にメモリ解放が上手くできていないものと予測しています。 この場合に、C側のメモリをpythonから開放するなど、 対応策が浮かぶ方はいらっしゃいますでしょうか。
回答: pythonではメモリを開放してもOSにかえすとは限らないので... 以下のリンクが役に立つかもしれません。 https://stackoverflow.com/questions/15455048/releasing-memory-in-python pythonでそのデータを使わないのなら、その作業をsubprocessに投げれば処理が終わった後にsubprocessがキルされてOSにメモリが返却されます。 https://mail.python.org/pipermail/python-list/2016-April/707455.html