在应用程序启动时填充 ETS table
Populate ETS table on application start
我正在尝试创建一个 elixir/erlang ets
table 并在应用程序启动时用一些数据填充它。我看到启动时是运行,但可能是compile/runtime错误?
例如:
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
中,我记录并记录。知道如何在应用程序 运行s 时填充然后访问吗?
如果您只想创建一个 table 并填充一次(不附加到另一个子流程,如 GenServer
),您可以直接在应用程序的 start/2
回调中执行:
def start(_type, _args) do
# Create ETS Table here
# and seed it with initial data
# Other stuff...
end
如果您想在子进程启动时专门执行此操作, 您可以在 init/1
回调中 create/populate 它。这就是 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
其他进程(如 Supervisor、Task、GenStage 等)也类似...
我正在尝试创建一个 elixir/erlang ets
table 并在应用程序启动时用一些数据填充它。我看到启动时是运行,但可能是compile/runtime错误?
例如:
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
中,我记录并记录。知道如何在应用程序 运行s 时填充然后访问吗?
如果您只想创建一个 table 并填充一次(不附加到另一个子流程,如 GenServer
),您可以直接在应用程序的 start/2
回调中执行:
def start(_type, _args) do
# Create ETS Table here
# and seed it with initial data
# Other stuff...
end
如果您想在子进程启动时专门执行此操作, 您可以在 init/1
回调中 create/populate 它。这就是 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
其他进程(如 Supervisor、Task、GenStage 等)也类似...