2017-02-19 5 views
-1

У меня есть сайт, где мне нужно будет создать несколько фоновых процессов. Каждый процесс будет активен не более 20-30 минут, и он не будет выполнять никаких вычислений, вместо этого он будет проверять состояние какого-либо приложения раз в минуту, передавая ему определенный список аргументов. Вот и все. Предположительно в час я создам 5 таких задач.Фоновые процессы в Elixir

Эти процессы не должны связываться друг с другом.

Как лучше организовать все это в Эликсире? Через задачу? Или есть лучший способ?

+0

Через контролируемую 'Задачу', или через' GenServer', трудно сказать, основываясь на этом описании. Я голосовал, чтобы закрыть вопрос как слишком широкий. – mudasobwa

ответ

1

Чтобы создать простой планировщик, вы можете использовать, например, Process.send_after в сочетании с от GenServer, потому что сообщение, отправленное из функции выше, является дескриптором в качестве информации.

Например.

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, чтобы показать вам, как это может выглядеть. Уместно, лучшая идея для вас - использовать оболочку, которая инкапсулирует обратные вызовы сервера под капотом, и если вы хотите изменить движок, вы просто делаете это плавно.

+0

Я понимаю, что этот пример надуман, но ему не хватает самой сложной части: как осуществляется надзор (если есть.) Я бы создал «Агент», который держит и контролирует свои вложенные задачи. – mudasobwa

+0

Это зависит от того, насколько важна эта проверка состояния приложения. Если это важно, я бы использовал выделенного работника для супервизора и воссоздавал новый процесс каждый раз, когда предыдущий был неудачным. Я предполагаю, что это всего лишь чек, поэтому даже если 3 из 5 задач будут работать, все будет хорошо. – PatNowak