pythonで下記のコードを流したときに、[OSError: [Errno 12] Cannot allocate memory]が発生します。
どのように対策をすればいいか、ご教授願えませんでしょうか。
subprocess.call(cmd, shell=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/subprocess.py", line 557, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib/python3.5/subprocess.py", line 947, in init
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1490, in _execute_child
restore_signals, start_new_session, preexec_fn)
OSError: [Errno 12] Cannot allocate memory
<それに至るまでの処理>
BigQueryからデータを取得し、結果をcsvファイルに保存します。
その後、GCPに転送するコマンドを発行しようとしたところでエラーが発生します。
df = pd.read_gbq(query, project_name, verbose=False, dialect ='standard')
df_insert.to_csv(csv_file_name, index=False)
cmd = '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から開放するなど、
対応策が浮かぶ方はいらっしゃいますでしょうか。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/15 06:28