Elixir中的背景过程

时间:2017-02-19 06:22:07

标签: elixir background-process phoenix-framework

我有一个网站,我必须创建多个后台进程。 每个进程最多只能活动20-30分钟并且不会进行任何计算,相反它只会在一分钟内检查一些应用程序的状态,并将一个参数列表传递给它。而已。据说每小时我会创造5个这样的任务。

这些过程无需相互沟通。

如何组织Elixir中的所有内容?通过任务?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

要创建这样的简单调度程序,您可以使用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中使用它来向您展示它的外观。对你来说最好的想法是使用包装器,它封装了服务器的回调,如果你想改变引擎,你就可以顺利地完成它。