質問編集履歴

3

追記

2022/07/14 20:39

投稿

fu_3823
fu_3823

スコア81

test CHANGED
File without changes
test 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

test CHANGED
File without changes
test CHANGED
@@ -30,8 +30,8 @@
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
 
37
37
 

1

追記

2022/07/14 20:22

投稿

fu_3823
fu_3823

スコア81

test CHANGED
File without changes
test CHANGED
@@ -11,10 +11,27 @@
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
+ 要約したコードです。
27
+ create_data関数には他の処理も入りますが、そこは省略しました。確認のため、返りのファイルサイズを毎回取得すると、大きい場合は、例えば90MBなどのこともありますが、ほとんどが数百KBです。
28
+
29
+ また、一つ訂正です。
30
+  > 毎回extend後に、新しいリストが作られているようで、
31
+ と質問に書きましたが、オブジェクトにのidを確認すると、同じ値だったので、この認識は間違っていたようです。ですが、試しにextend()をコメントアウトして、ファイルのopenだけをループするとメモリは増えず、最後まで処理は回ります。問題の切り分けをして、extend()の箇所に問題があるのではないかと考えました。extend()すると、読み込んだファイル以上にメモリを消費してしまいます。
32
+
33
+ 先ほど気がついたことですが、extend後の`data`を__sizeof__()でチェックすると、ループの途中で増えていなことに気づきました。170MBくらいから増えていません。ただ、len()でリストのサイズの確認すると毎回`data`の長さは大きくなっています。
18
- コードは、上記うなサンプルよくある単純ので、gc使どころもわからないで
34
+ extemd後`data`の内容がどうなっているかはこれからのチェックになりますが、ここまで説明問題可能性を指摘してただける方はいないでしょうか
19
35
 
20
36
 
37
+