Celery로 비동기 PDF 변환하기

이번 포스트에서는 Celery를 사용하여 비동기적으로 PDF 파일을 변환하는 방법에 대해 알아보겠습니다.

Celery란?

Celery는 분산 작업 큐에 대한 분산된 작업 처리 기능을 제공하는 Python 라이브러리입니다. Celery를 사용하면 작업을 비동기적으로 실행하고, 큐잉 및 분산 작업 처리를 쉽게 구현할 수 있습니다.

PDF 변환 작업 설정하기

먼저, 필요한 패키지를 설치해야 합니다. 아래 명령어를 사용하여 필요한 패키지를 설치할 수 있습니다.

pip install celery pdfkit

다음으로, Celery 작업을 정의하기 위해 tasks.py 파일을 생성합니다.

from celery import Celery
import pdfkit

app = Celery('pdf_conversion', broker='amqp://guest@localhost//')

@app.task
def convert_to_pdf(url, output_file):
    pdfkit.from_url(url, output_file)

위의 코드에서 convert_to_pdf 함수는 비동기적으로 실행될 작업을 정의합니다. 이 함수는 주어진 URL의 웹페이지를 PDF로 변환하고, 지정된 출력 파일에 저장합니다.

Celery 실행하기

Celery 작업을 실행하기 위해 worker를 시작해야 합니다. 아래 명령어를 사용하여 worker를 실행할 수 있습니다.

celery -A tasks worker --loglevel=info

이제 worker가 실행 중이므로, 애플리케이션에서 Celery를 사용하여 PDF 변환 작업을 시작할 수 있습니다.

from tasks import convert_to_pdf

# Celery 작업 실행
convert_to_pdf.delay('https://example.com', 'output.pdf')

위의 코드에서 convert_to_pdf.delay 함수를 호출하여 Celery 작업을 비동기적으로 시작합니다. 첫 번째 인자로 변환할 웹페이지의 URL을, 두 번째 인자로 출력 파일의 이름을 전달합니다.

결과 확인하기

위의 코드에서는 delay 메서드를 사용하여 작업을 비동기적으로 시작했습니다. 따라서 작업이 완료될 때까지 기다리지 않고, 작업 결과를 즉시 얻을 수는 없습니다.

작업 결과를 확인하려면, Celery의 결과 backend를 설정해야 합니다. 예를 들어, Redis를 사용하여 결과를 저장하도록 설정할 수 있습니다. 결과 backend를 설정한 후에는 AsyncResult.get 메서드를 사용하여 작업 결과를 얻을 수 있습니다.

from tasks import convert_to_pdf

result = convert_to_pdf.delay('https://example.com', 'output.pdf')
result.get()

위의 코드에서 get 메서드를 호출하여 작업 결과를 얻습니다.

마무리

이번 포스트에서는 Celery를 사용하여 비동기적으로 PDF 파일을 변환하는 방법에 대해 알아보았습니다. Celery를 사용하면 작업을 비동기적으로 처리하여 애플리케이션의 성능을 향상시킬 수 있습니다.