2017-02-19 5 views
-1

여러 백그라운드 프로세스를 만들어야하는 웹 사이트가 있습니다. 각 프로세스는 최대 20-30 분 동안 살아있을 것이며 계산을 수행하지 않을 것입니다. 대신 몇 분 안에 특정 응용 프로그램의 상태를 확인하여 특정 인수 목록을 전달할 것입니다. 그게 전부 야. 아마도 시간당 5 개의 작업을 생성 할 것입니다.엘릭서의 백그라운드 프로세스

이 프로세스는 서로 통신 할 필요가 없습니다.

엘 릭셔의 모든 것을 어떻게 구성하는 것이 더 좋습니까? 작업을 통해? 아니면 더 좋은 방법이 있습니까?

+0

모니터 된'Task' 또는'GenServer'를 통해이 설명을 근거로 말하기는 어렵습니다. 나는 너무 광범위하게 질문을 끝내기로 표결했다. – mudasobwa

답변

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 

더 나은 해결책은 무엇입니까? Tasks and Agents는 GenServers이기도하며, API가 단순합니다. 내 예제 GenServer에서 어떻게 보이는지 보여주기 위해 사용했습니다. 아마도 당신을위한 가장 좋은 아이디어는 서버의 콜백을 캡슐화 한 래퍼 (wrapper)를 사용하는 것입니다. 엔진을 변경하려면 원할하게 수행하십시오.

+0

이 예제는 고안된 것이지만, 가장 복잡한 부분이 거의 없다는 것을 압니다. 감독이 어떻게 수행되는지 (있는 경우) 중첩 된 태스크를 소유하고 감독하는 '에이전트'를 생성합니다. – mudasobwa

+0

그것은 응용 프로그램 상태에 대한이 검사가 중요한지 여부에 달려 있습니다. 중요한 경우 관리자에게 전담 직원을 사용하고 이전 프로세스가 실패 할 때마다 새 프로세스를 다시 작성합니다. 나는 그것이 단지 수표 일 것 같아서, 5 개의 작업 중 3 개가 작동하더라도, 괜찮을 것입니다. – PatNowak