私は複数のバックグラウンドプロセスを作成する必要があるウェブサイトを持っています。 各プロセスは20〜30分で生き残りますが、計算は行われません。代わりに、あるアプリケーションの状態を確認して、引数の特定のリストを渡します。それでおしまい。おそらく1時間に5つのタスクを作成します。エリクシルのバックグラウンドプロセス
これらのプロセスは、互いに通信する必要はありません。
エリクシルのすべてをどのように整理するのがよいでしょうか?タスクを経由しますか?それとも良い方法がありますか?
私は複数のバックグラウンドプロセスを作成する必要があるウェブサイトを持っています。 各プロセスは20〜30分で生き残りますが、計算は行われません。代わりに、あるアプリケーションの状態を確認して、引数の特定のリストを渡します。それでおしまい。おそらく1時間に5つのタスクを作成します。エリクシルのバックグラウンドプロセス
これらのプロセスは、互いに通信する必要はありません。
エリクシルのすべてをどのように整理するのがよいでしょうか?タスクを経由しますか?それとも良い方法がありますか?
このような単純なスケジューラを作成するには、上記の関数から送信されたメッセージがinfoとして扱われるため、たとえば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