Elixir线程安全访问json文件?

时间:2016-10-14 01:39:17

标签: elixir

我有多个任务试图同时读取然后更新.json文件。在数据库场景中,我只是把锁放在一行......可以用文件做类似的事吗?

我知道这可以通过genserver handle_call解决,我有更简单的选择吗?

2 个答案:

答案 0 :(得分:1)

没有机制可以锁定文件的特定行,并且没有我知道的elixir json库可以让你锁定json结构中的特定元素。你必须建立你自己的数据的灵丹妙药表示,并做一些像“checkout”和“签入”结构中的元素或者在一个过程中包装结构的每个子片段。

在编写elixir / erlang / otp时,你也应该忘记单词thread。我们使用流程。

答案 1 :(得分:0)

确实没有理由不使用GenServer来包装"这个文件 - 努力很低,收益很大:

  1. 您可以构建一个关于JSON文件修改的抽象,这很可能会清理您的代码;
  2. GenServer执行被序列化,消除了锁定问题;
  3. 您构建了一个基础,让您为更高级的用法做好准备(例如,在JSON编辑完成时使用回调进行异步调用)。
  4. 我相信我能拿出更多。在启动Elixir时,GenServer感觉有点重量级(它确实有更多的样板);过了一会儿,问题就变成了#34;我把它包装在GenServer中吗?"但是"这个位的GenServer会是什么样子?" - 它变得很自然。