在应用程序启动时填充ETS表

时间:2018-10-17 23:47:17

标签: erlang elixir ets

我正在尝试创建一个elixir / erlang ets表,并在应用程序启动时为其填充一些数据。我看到它在启动时就运行了,但是可能是编译/运行时错误?

例如:

def start(_type, _args) do
  import Supervisor.Spec

  # Define workers and child supervisors to be supervised
  children = [
    DataToETS,
  ]

  opts = [strategy: :one_for_one, name: App.Supervisor]
  Supervisor.start_link(children, opts)
end

然后是DataToETS

defmodule DataToETS do
  use Task

  def start_link(opts) do
    Task.start_link(DataToETS, :run, [])
  end

  def run do
    # Load to the ETS  
  end

end

在我的DataToETS中,我会记录日志。知道如何在应用程序运行时填充然后访问吗?

1 个答案:

答案 0 :(得分:3)

如果您只想创建一个表并填充一次(不附加到另一个子流程,例如GenServer),则可以直接在{{1 }}您的应用程序的回调:

start/2

如果要在启动子流程时专门执行此操作,,则可以在其def start(_type, _args) do # Create ETS Table here # and seed it with initial data # Other stuff... end 回调中创建/填充它。这是GenServer的外观:

init/1

对于其他过程,例如Supervisor,Task,GenStage等,