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



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

例如:

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我做日志,它记录。知道如何在应用程序运行时填充然后访问吗?

如果你只想创建一个表并填充它一次(不附加到另一个子进程,如GenServer(,你可以直接在应用程序的start/2回调中执行此操作:

def start(_type, _args) do
# Create ETS Table here
# and seed it with initial data
# Other stuff...
end

如果要在子进程启动时专门执行此操作,则可以在其init/1回调中创建/填充它。这是GenServer的外观:

defmodule DataToETS do
def start_link(_args) do
GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
end
def init(:ok) do
# Create ETS Table here
# and seed it with initial data
:ok
end
end

对于其他流程(如主管、任务、GenStage 等(也是如此......

相关内容

  • 没有找到相关文章

最新更新