1. Best Practices RabbitMQ 또는 Redis 를 브로커(broker)로 쓰세요. (상용 환경에서 RDB를 브로커로 쓰지 마세요.) 복잡한 객체(object)를 태스크(task)에 파라미터(parameter)로 사용하지 마세요. (예를 들면 Django의 모델 객체) 재시도 태스크에서 boilerplate code를 줄이기 위해서 autoretry_for 를 사용하세요. 재시도 횟수를 지수적으로 감소시킬때 boilerplate code를 줄이기 위해서 retry_backoff 를 사용하세요. 높은 신뢰도가 필요한 태스크에서는 acks_late와 retry를 함께 사용하세요. 물론 멱등성과 원자성을 가지도록 해야합니다. (Should I use retry or acks_late?) 최대 제한(hard limit)과 경고 제한(soft limit) 시간을 설정하세요. 태스크가 예상보다 오래 걸린다면 완만하게 복구하세요. 처리량과 확장성을 제어하기 위해서 큐를 여러개 사용하세요. (Routing Tasks) 기본적인 작업을 정의하려면 기본 태스크 클래스를 만들어 상속하세요. (Custom Task Classes) 태스크 흐름과 동시성을 제어하기 위해서 Canvas 기능을 사용하세요. (Canvas: Designing Work-flows) 2. Monitoring & Tests 가능한 한 더 많은 로그를 남기세요. get_task_logger를 이용해서 태스크 이름과 고유 id를 자동으로 가져오세요. 실패했을 때 stack trace를 남기고 사람이 알 수 있도록 하세요. (Sentry 같은 서비스를 쓰는게 좋아요) Flower: Real-time Celery web-monitor 를 사용해서 샐러리 모니터링을 하세요. 태스크 호출을 테스트할 때 task_always_eager를 사용하세요. 3. Resources Tips and Best Practices from the official documentation. Task Queues by Full Stack Python Flower: Real-time Celery web-monitor from the official documentation. Celery Best Practices: practical approach by Adil 3 GOTCHAS FOR CELERY from Wiredcraft CELERY - BEST PRACTICES by Deni Bertovic Hacker News thread on the above post [video] Painting on a Distributed Canvas: An Advanced Guide to Celery Workflows by David Gouldin Celery in Production by Dan Poirier from Caktus Group [video] Implementing Celery, Lessons Learned by Michael Robellard [video] Advanced Celery by Ask Solem Hoel Celery Best Practices by Balthazar Rouberol