2016-05-26 6 views
3

私はいくつかの簡単な作業で立ち往生してきました。我々はいくつかの擬似コードを持っていると仮定しましょう:save_resultsは私達の範囲は、我々は開放に時間を費やして、ファイルを閉じている本当に大きなであればものがあるエリクシールでファイルに追加する最良の方法は何ですか

def save_results(data) do 
    {:ok, file} = File.open "data.log", [:append] 
    Enum.each(data, &(IO.binwrite(file, &1))) 
    File.close file 
end 

ある

Enum.each 1..1_000_000, fn(id) -> 
    some_complex_method(id) |> save_results 
end 

。どのようにそれがオープン状態を処理し、作業が完了したときにメソッドを閉じるようにするには?

+0

を。何が起こっていると信じるに至りますか? –

+0

申し訳ありませんが、私は疑似コードで重要な部分を見逃しました。今すぐ更新されました。 – nateless

答えて

0

それは上記のコードは、各書き込みにファイルを開いて、閉じますかのようにしかし、あなたは、私は多分あなたがFile.stream!/3

であなたの File.open/2を置き換えることをお勧めしたい示していない何かがあるかどう見ていません
+0

申し訳ありませんが、私は擬似コードで重要な部分を見逃しました。今すぐ更新されました。基本的には、1 ... 1_000_000まで進み、各数値を何らかのメソッドに渡します。いくつかのデータが生成され、その結果がログファイルに保存されます。 – nateless

+0

これを達成する他の方法はありますか?たぶんGenServerを使用していますか? – nateless

1

あなたは作品を前もってやってもいいですか?

results = Enum.map 1..1_000_000, fn(id) -> 
    some_complex_method(id) 
end 

、その後:

log_results(results) 

:それは開いて、ファイルごとに閉じられるようにあなたのsave_resultsコードが見えない

defp log_results(results) do 
    {:ok, file} = File.open("data.log", [:append]) 
    save_results(file, results) 
    File.close(file) 
end 

defp save_results(file, []), do: :ok 
defp save_results(file, [data|rest]) do 
    IO.binwrite(file, data) 
    save_results(file, rest) 
end 
関連する問題