ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] Celery 작업 실패 시 콜백 함수 설정하기
    파이썬/장고 2021. 6. 20. 16:43

    https://en.wikipedia.org/wiki/Celery_(software)#/media/File:Celery_logo.png

    Celery는 분산 메시지 전달에 기반을 둔 오픈 소스 비동기 task queue이다.

     

    진행 중인 프로젝트에서 데이터 수집 작업을 비동기로 처리하기 위해 장고와 연동해서 Celery를 사용하였는데,

    Celery가 수행하는 모든 작업은 별도의 작업 기록 테이블에서 관리되도록 하였다.

    그런데 이를 위해서 작업 실패 시의 상태값 업데이트가 필요했다.

     

    처음에는 일정 시간마다 result backend를 조회하는 스케줄러를 통해서 상태값을 업데이트해볼까 생각했지만,

    배보다 배꼽이 커지는 격이어서 다른 방법을 찾게 되었다.

     

    그러던 중 Celery에서 on_failure()라는 콜백 함수를 지원하는 걸 발견했다.

    사용 방법은 다음과 같다.

     

    1. celery.Task 클래스 상속 후 on_failure() 함수 오버라이딩

    import celery
    
    
    class TaskBase(celery.Task):
    
    	def on_failure(self, exc, task_id, args, kwargs, einfo):
    		#task 실패 시 처리

     

    2. 작성한 클래스를 @shared_task 어노테이션의 base 속성값으로 설정

    @shared_task(name='test_task', base=TaskBase)
    def test_task():
    	#작업 내용

     

    이처럼 on_failure() 함수를 이용하여 실패 시의 콜백 함수를 간단히 구현할 수 있다.

    각 task 함수 마지막에 성공 상태값 업데이트 함수를 실행하고,

    on_failure() 함수에서 실패 상태값을 업데이트함으로써 Celery 작업 기록 로직을 구현하였다.

    댓글

Designed by Tistory.