Celery를 활용한 비동기 파일 압축

애플리케이션에서 파일 압축 작업은 종종 시간이 오래 걸리는 작업일 수 있습니다. 이러한 작업을 동기적으로 처리하면 사용자는 애플리케이션이 응답하지 않는 것처럼 느낄 수 있습니다. 이러한 문제를 해결하기 위해 비동기 작업을 사용할 수 있습니다.

Celery는 Python에서 사용하는 널리 알려진 비동기 작업 큐입니다. 이를 사용하여 파일 압축 작업을 비동기적으로 처리하는 방법을 살펴보겠습니다.

Celery 설정

먼저, Celery를 설정해야 합니다. celery.py라는 파일을 생성하고 다음과 같이 설정합니다.

from celery import Celery

app = Celery('tasks', broker='redis://localhost:6379/0', backend='redis://localhost:6379/0')

@app.task
def compress_file(file_path):
    # 파일 압축 작업 수행
    # ...

위 예제에서는 Redis를 사용하여 Celery 큐를 설정하고 있습니다. 여기서 사용하는 큐 설정에 따라 적절한 값을 입력해야 합니다.

비동기 작업 정의

다음으로는 압축 작업을 정의해야 합니다. tasks.py라는 파일을 생성하고 다음과 같이 작성합니다.

from celery import Celery
from .celery import app

@app.task
def compress_file(file_path):
    # 파일 압축 작업 수행
    # ...

위 예제에서는 app 객체를 import하여 @app.task 데코레이터를 사용하여 compress_file 함수를 비동기 작업으로 정의하고 있습니다.

압축 작업 실행

이제 압축 작업을 실행할 수 있는 코드를 작성해 보겠습니다. 예를 들어, 웹 애플리케이션에서 파일 업로드가 완료된 후 압축 작업을 실행하는 코드를 작성해보겠습니다.

from .tasks import compress_file

# 파일 업로드 처리 로직
# ...

# 파일 압축 작업을 Celery를 통해 비동기적으로 실행
compress_file.delay(file_path)

위 코드에서는 압축 작업을 compress_file.delay(file_path)로 실행하고 있습니다. delay 메서드는 비동기 작업을 큐에 추가합니다.

Celery Worker 실행

마지막으로, 압축 작업을 처리하는 Celery worker를 실행해야 합니다. 터미널에서 다음 명령어를 실행하여 worker를 실행할 수 있습니다.

$ celery -A tasks worker --loglevel=info

위 명령어에서 -A taskstasks.py 파일의 위치를 나타내며, --loglevel은 로그 레벨을 설정하는 옵션입니다.

이제 파일 압축 작업을 비동기적으로 처리할 준비가 되었습니다. Celery를 사용하면 사용자 경험을 향상시키면서 시간이 오래 걸리는 작업을 효율적으로 처리할 수 있습니다.

참고 자료:

#python #Celery