Как спать по вкусу потребителю / производителю?
У меня есть 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
...
и все, больше ничего не происходит