我有一個網站,我必須創建多個後臺進程。 每個進程最多隻能存活20-30分鐘,並且不會進行任何計算,而只會在一分鐘內檢查某個應用程序的狀態,並將其傳遞給某個參數列表。而已。據說每小時我會創建5個這樣的任務。Elixir的後臺進程
這些過程不必互相通信。
如何組織Elixir中的所有內容?通過任務?或者,還有更好的方法?
我有一個網站,我必須創建多個後臺進程。 每個進程最多隻能存活20-30分鐘,並且不會進行任何計算,而只會在一分鐘內檢查某個應用程序的狀態,並將其傳遞給某個參數列表。而已。據說每小時我會創建5個這樣的任務。Elixir的後臺進程
這些過程不必互相通信。
如何組織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中使用它來展示它的樣子。對你來說最好的想法是使用包裝器,它將服務器的回調封裝在引擎蓋下,如果你想改變引擎,你就可以順利地進行。
通過監控'Task',或者通過'GenServer',很難說出這個描述。我已經投票決定把這個問題過於寬泛。 – mudasobwa