我有一个网站,我必须创建多个后台进程。 每个进程最多只能活动20-30分钟并且不会进行任何计算,相反它只会在一分钟内检查一些应用程序的状态,并将一个参数列表传递给它。而已。据说每小时我会创造5个这样的任务。
这些过程无需相互沟通。
如何组织Elixir中的所有内容?通过任务?或者有更好的方法吗?
答案 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中使用它来向您展示它的外观。对你来说最好的想法是使用包装器,它封装了服务器的回调,如果你想改变引擎,你就可以顺利地完成它。