APScheduler는 워커 프로세스 개수만큼 생성된다. 즉, 워커 프로세스마다 스케쥴러가 할당되기 때문에 중복 실행될 가능성이 높다.
Celery Beat는 task들을 Message Queue에 담는다. 그러면 celery가 message queue를 보고 task를 실행한다.
실제로 task를 실행하는 것은 celery이다.