[英]Populate ETS table on application start
我正在嘗試創建一個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
我會記錄日志。 知道如何在應用程序運行時填充然后訪問嗎?
如果您只想創建一個表並填充一次 (不附加到另一個子進程,如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
對於其他過程,例如Supervisor,Task,GenStage等,它也將類似。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.