Celery를 활용한 대용량 파일 처리

최근에는 대용량 파일을 처리해야하는 경우가 많이 발생하고 있습니다. 이러한 대용량 파일 처리는 시간과 자원을 많이 소모할 수 있으므로 효율적인 방법이 필요합니다. Celery는 분산 작업 큐 시스템으로 대용량 파일 처리를 간단하고 효율적으로 할 수 있는 도구입니다. 이번 글에서는 Celery를 사용하여 대용량 파일을 처리하는 방법에 대해 알아보겠습니다.

Celery란?

Celery는 파이썬으로 작성된 분산 작업 큐 시스템입니다. 작업자(worker)들이 큐에 들어온 작업을 비동기적으로 처리하는 방식으로 동작합니다. Celery는 분산 처리를 위해 RabbitMQ, Redis, Amazon SQS와 같은 메시지 브로커와 함께 사용될 수 있습니다. 대용량 파일 처리를 위해 Celery를 사용하면 작업을 자동으로 분산시켜 병렬로 처리할 수 있습니다.

Celery를 사용한 대용량 파일 처리 과정

  1. Celery 작업자(worker) 설정하기: 먼저 Celery 작업자(worker)를 설정해야합니다. 작업자는 큐로부터 작업을 받아 처리하는 역할을 합니다. 작업자를 실행하는 방법은 여러 가지가 있지만, celery 명령을 사용하여 실행할 수 있습니다.
# celery.py 파일

from celery import Celery

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

@app.task
def process_file(file_path):
    # 대용량 파일 처리 로직 작성
    pass
  1. 작업 추가하기: 대용량 파일 처리 작업을 큐에 추가해야합니다. 이때, Celery의 delay 메서드를 사용하여 작업을 추가할 수 있습니다.
from celery import Celery

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

@app.task
def process_file(file_path):
    # 대용량 파일 처리 로직 작성
    pass

if __name__ == '__main__':
    # 파일 경로를 인자로 받아서 작업 추가
    result = process_file.delay('/path/to/large/file.txt')
    print("작업이 추가되었습니다. 작업 ID: ", result.task_id)
  1. 작업 실행하기: 작업자는 큐에서 작업을 가져와 처리합니다. Celery를 실행하여 작업자를 시작할 수 있습니다.
$ celery -A tasks worker --loglevel=info
  1. 작업 상태 조회하기: Celery는 작업의 상태를 추적할 수 있는 기능을 제공합니다. 작업 ID를 사용하여 작업의 상태를 조회할 수 있습니다.
from celery.result import AsyncResult

result = AsyncResult('작업 ID')
if result.ready():
    print("작업이 완료되었습니다.")
else:
    print("작업이 진행 중입니다.")
  1. 결과 확인하기: 대용량 파일 처리 작업이 완료되면 결과를 확인할 수 있습니다. 작업자는 작업을 완료하면 작업 결과를 반환합니다.
from celery.result import AsyncResult

result = AsyncResult('작업 ID')
if result.ready():
    print("작업 결과: ", result.result)
else:
    print("작업이 아직 완료되지 않았습니다.")

Celery를 사용하여 대용량 파일을 처리하는 방법에 대해 알아보았습니다. Celery는 분산 작업 큐 시스템으로 대용량 파일 처리를 효율적으로 해결할 수 있는 강력한 도구입니다. Celery의 다양한 기능을 활용하여 대용량 파일 처리 성능을 향상시킬 수 있습니다.

#파일처리 #Celery