teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

追記

2022/07/14 20:39

投稿

fu_3823
fu_3823

スコア81

title CHANGED
File without changes
body CHANGED
@@ -6,8 +6,7 @@
6
6
  全て連結したあとのデータサイズは2GB程度で、ひとつひとつの小さなデータは大きくても数百KBです。きちんとメモリが解放されているようなら、問題なくプログラムは終了すると思うのですが、これはPythonの仕様なのでしょうか。
7
7
 
8
8
  ### 実現したいこと
9
- gc使うなどして、メモリを開放したいですが、どう使ってよいのかわからないです
9
+ メモリ解放するなどして、メモリの使用可能領域適切に増やしたいです。
10
-
11
10
  ### 該当のソースコード
12
11
 
13
12
  ```python

2

追記

2022/07/14 20:38

投稿

fu_3823
fu_3823

スコア81

title CHANGED
File without changes
body CHANGED
@@ -30,7 +30,7 @@
30
30
   > 毎回extend後に、新しいリストが作られているようで、
31
31
  と質問に書きましたが、オブジェクトにのidを確認すると、同じ値だったので、この認識は間違っていたようです。ですが、試しにextend()をコメントアウトして、ファイルのopenだけをループするとメモリは増えず、最後まで処理は回ります。問題の切り分けをして、extend()の箇所に問題があるのではないかと考えました。extend()すると、読み込んだファイル以上にメモリを消費してしまいます。
32
32
 
33
- 先ほど気がついたことですが、extend後の`data`を__sizeof__()でチェックすると、ループの途中で増えていなことに気づきました。170MBくらいから増えいません。ただ、len()でリストのサイズの確認すると毎回`data`の長さは大きくなっています。
34
- extemd後の`data`の内容がどうなっているかはこれからのチェックになりますが、ここまでの説明で問題の可能性を指摘していただける方はいないでしょうか。
33
+ 先ほど気がついたことですが、extend後の`data`を__sizeof__()でチェックすると、ループの途中で増えていなことがあることに気づきました。170MBくらいから数ループ増えず、しばらくするとまた増えるとうことを繰り返し。ただ、len()でリストのサイズの確認すると毎回`data`の長さは大きくなっています。__sizeof__()の結果は、逐次print()で出力しながらの確認です。
34
+ extemd後の`data`の末尾は毎回変化していました。全体の内容がどうなっているかはこれからのチェックになりますが、ここまでの説明で問題の可能性を指摘していただける方はいないでしょうか。
35
35
 
36
36
 

1

追記

2022/07/14 20:22

投稿

fu_3823
fu_3823

スコア81

title CHANGED
File without changes
body CHANGED
@@ -11,9 +11,26 @@
11
11
  ### 該当のソースコード
12
12
 
13
13
  ```python
14
+ def create_data(file_name):
15
+ with gzip.open(file_name, 'rt',) as f:
16
+ content = f.readlines()
17
+ content = [sub.split(",") for sub in content]
18
+ return content
19
+
14
20
  data = []
15
21
  for f in files_list:
22
+ new_content = create_data(f)
16
-    data.extend(f)
23
+ data.extend(new_content)
24
+
17
25
  ```
26
+ 要約したコードです。
18
- コード、上記ようなサンプルによくある単純なものgc使いどこわからないです。
27
+ create_data関数に処理入りますが、そこは省略しました。確認ため返りファイルサイズを毎回取得すると、大き場合は、例えば90MBなありますが、ほとんどが数百KBです。
19
28
 
29
+ また、一つ訂正です。
30
+  > 毎回extend後に、新しいリストが作られているようで、
31
+ と質問に書きましたが、オブジェクトにのidを確認すると、同じ値だったので、この認識は間違っていたようです。ですが、試しにextend()をコメントアウトして、ファイルのopenだけをループするとメモリは増えず、最後まで処理は回ります。問題の切り分けをして、extend()の箇所に問題があるのではないかと考えました。extend()すると、読み込んだファイル以上にメモリを消費してしまいます。
32
+
33
+ 先ほど気がついたことですが、extend後の`data`を__sizeof__()でチェックすると、ループの途中で増えていなことに気づきました。170MBくらいから増えていません。ただ、len()でリストのサイズの確認すると毎回`data`の長さは大きくなっています。
34
+ extemd後の`data`の内容がどうなっているかはこれからのチェックになりますが、ここまでの説明で問題の可能性を指摘していただける方はいないでしょうか。
35
+
36
+