2014年12月21日

JuliaでREPLを使っている時に情報をクリアする方法を探す

IPythonのresetみたいなヤツが理想。

使用バージョンは0.3.3

StackOverFlow先生によると、workspace() で消せるらしい。

Julia: How to clear console
http://stackoverflow.com/questions/26548687/julia-how-to-clear-console

0.3のリリースノートには下記のように書いてある。

The workspace() function was added, to clear the environment without restarting.

http://julialang.org/blog/2014/08/julia-0.3-release/

試しに使ってみる。

julia> x = 0
0

julia> x
0

julia> workspace()

julia> x
ERROR: x not defined

確かに消えてる。

workspaceの処理自体は下記に書いてある。

interactiveutil.jl
https://github.com/JuliaLang/julia/blob/master/base/interactiveutil.jl

けど、読んでもよくわからなかった。eval ... expr ... えーと。とりあえずパッケージをクリアしているのはわかる。

これを実行するとメモリは解放されるのだろうか。適当に100MBくらいのファイルをDataFramesで読み込ませてtopでメモリ使用量を見てみる。

import DataFrames
df = DataFrames.readtable( "100mb_file.tsv", separator='\t' )
workspace()
実行前 : 73MB
DataFrames import後 : 162MB
readtable実行後 : 426MB
workspace実行後 : 434MB

変わらんね

gc()実行後 : 359MB

減ったけどまだ残ってる。

じゃ、これでどうだ。

import DataFrames
df = DataFrames.readtable( "100mb_file.tsv", separator='\t' )
df = None
gc()
workspace()
上記コード実行後 : 179MB

さすがにこれだと消えているようだ。

新しいworkspaceでまた同じファイルを読み込んで、再度次のworkspace立ち上げるのを繰り返したらメモリ使用量はどんどん加算されていった。

回避方法とかあるのだろうか。まあ、とりあえず当面はexitして立ち上げ直そう。