Как спать по вкусу потребителю / производителю?

У меня есть Producer, в котором данные выбираются из базы данных:

  def handle_demand(demand, []) do
    Logger.debug("#{inspect(self())} Producer empty handle_demand #{demand}")
    next_pack = selecting new pack
    case List.last(next_pack) do
      nil ->
        Logger.info "Empty next_pack!"
        Logger.info "return :noreply, [], []"
        {:noreply, [:empty], []}
      contact ->
        head = Enum.slice(next_pack, 0, demand)
        tail = Enum.slice(next_pack, demand, Enum.count(next_pack))
        {:noreply, head, tail}
      end
  end

  def handle_demand(demand, pack) do
    head = Enum.slice(pack, 0, demand)
    tail = Enum.slice(pack, demand, Enum.count(pack))
    {:noreply, head, tail}
  end

и потребитель:

  @impl GenStage
  def handle_events([:empty], _from, db_pid) do
    Logger.info "next_pack empty, wait"
    :timer.sleep 5_000
    {:noreply, [], db_pid}
  end

  @impl GenStage
  def handle_events(next_pack, _from, db_pid) do
    process(db_pid, next_pack)
    {:noreply, [], db_pid}
  end

как спать производителю или работнику, если у производителя нет новых данных?

этот код напишите в лог:

...
15:42:23.415 [info]  Empty next_pack!
15:42:28.416 [info]  return :noreply, [], []
15:42:28.416 [info]  next_pack empty, wait
...

и все, больше ничего не происходит

0 ответов

Другие вопросы по тегам