簡體   English   中英

在應用程序啟動時填充ETS表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM