Elixir 中的后台进程

Background processes in Elixir

我有一个网站,我必须在其中创建多个后台进程。 每个进程将最多存活 20-30 分钟,并且它不会进行任何计算,而只是每分钟检查一次某个应用程序的状态,并向其传递特定的参数列表。而已。据说每小时我会创建 5 个这样的任务。

这些进程不必相互通信。

如何在 Elixir 中更好地组织所有这些?通过任务?或者有更好的方法吗?

要制作这样一个简单的调度程序,您可以将 Process.send_after 与 GenServer 的 handle_info 结合使用,因为从上面的函数发送的消息是作为信息处理的。

例如

defmodule YourGenServer do
  use GenServer

  def init(initial_value) do
    Process.send_after(self, :check_state, 1000 * 60 * 20) # 20 minutes delay
  end

  def handle_info(:check_state, state) do
    # do the task
    Process.send_after(self, :check_state, 1000 * 60 * 20)
  end
end

有什么更好的解决方案?任务和代理也是 GenServers,只是它们的 API 更简单。我在示例 GenServer 中使用它来向您展示它的外观。对你来说最好的想法可能是使用包装器,它在引擎盖下封装了服务器的回调,如果你想改变引擎,你只需顺利地进行。