gpt4 book ai didi

elixir - 在 Elixir 中附加到文件的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-04 20:35:07 25 4
gpt4 key购买 nike

我一直坚持一些简单的任务。假设我们有一些伪代码:

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

在哪里 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

问题是如果我们的范围真的很大,我们会花时间打开和关闭文件。如何让它处理打开状态并在工作完成时调用关闭方法?

最佳答案

而不是 :append作为写入模式使用 {:delayed_write, non_neg_integer, non_neg_integer}为了使您的写入得到缓冲,直到达到一定数量的要写入的数据或达到一定的时间。不要忘记使用 :append另外,如果您只打算在文件末尾追加!
第一个non_neg_integer是在写入发生之前要缓冲的大小(以字节为单位)。
第二个non_neg_integer是写入发生前缓冲的延迟毫秒数。更详细的解释请访问 the erlang documentation of :file.open/2 .
对于其他可能的模式,请查看 elixir documentation for File.open/2
您的示例可能如下所示:

Enum.each 1..1_000_000, fn(id) ->
some_complex_method(id) |> save_results
end
在哪里 save_results
def save_results(data) do
{:ok, file} = File.open "data.log", [:append, {:delayed_write, 100, 20}]
Enum.each(data, &(IO.binwrite(file, &1)))
File.close file
end
我无法判断这种确切的配置是否适合您的情况,但它肯定会减少文件打开的数量。
翻译上面的配置意思是:
亲爱的 File模块,
请缓冲我对文件 data.log 的写入直到我要求你写至少 100 字节的数据,或者直到你等了 20 毫秒让我给你更多的数据来写。
非常感谢你!
真正属于你的 your elixir coder

关于elixir - 在 Elixir 中附加到文件的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37461981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com