windows10でCSV形式などの大規模テキストデータを取り扱う際の注意点として、ハマったことをメモしておきます。
問題1:Windows Search Indexer が何時間も走りっぱなしになる
(Pro以上? Homeでは同事象出た記憶がないかも。。)
1GBくらいのCSVファイル150本をダウンロードして処理をしていたところ、CPUファンが回って止まらない。。
タスクマネージャーを確認すると、Windows Search IndexerがCPUを50%程度使っている様子。
待てど暮らせどOS再起動すれどプロセスは終わらず、CPUファンは回りっぱなし。。
原因:大規模テキストデータがインデックス作成の対象になっていた(様子)
デスクトップにフォルダを作って格納したテキストデータがインデックス作成の対象になっていた(様子)。
デフォルトの設定では、ユーザフォルダ配下は隠しフォルダである AppData を除く全フォルダが対象。
拡張子でも対象の判定があるが、今回処理していたファイルの拡張子は.csv。こちらはめでたくインデックス作成対象となっておりました。
100GBくらいのテキストファイルからインデックス作ってりゃ、そらいつまで経っても終わらんなと。
対応:大規模テキストデータを格納したフォルダをインデックス作成対象から外した
以下手順で対応。
- windowsメニューの横「ここに入力して検索」にカーソルを合わせて「インデックスのオプション」を起動
- 変更ボタンを押下
- 対象データが格納されていたフォルダをインデックス作成対象から外す
上記の操作後、しばらくしたらCPUファンが止まり、タスクマネージャーからwindows search indexerが消えていた。。。
問題2:大量メモリを扱うPythonの処理がMemoryErrorでABENDする
(こちらはwindows10固有ではなくpythonの問題か)
Pythonで大きめのテキストファイル(1GBくらい)を処理する際に MemoryError が出て PythonスクリプトがABENDする事象に見舞われました。windowsにはメモリ20GBを積んであるので、メモリ不足は全く考えられなかった。
原因:32bit版のPythonがインストールされていたため
32bit版Pythonの制約で、メモリを2GBまでしか扱えないようです。
ファイルのopenと処理で処理中に2GBを(瞬間的に?)超えてMemoryErrorが発生したようでした。
対応:64bit版のPythonをインストールして差し替えた
インストーラをダウンロードしてきて、64bit版Pythonをインストール、環境変数を書き換えて64bit版Pythonに差し替えたところ、同じPythonスクリプトが問題なく動作しました。