Celery를 활용한 비동기 이미지 처리

이미지 처리는 대부분의 웹 애플리케이션에서 필수적인 기능입니다. 그러나 대용량의 이미지를 동기적으로 처리하면 사용자 경험에 부정적인 영향을 미칠 수 있습니다. 이런 경우에는 Celery를 사용하여 이미지 처리를 비동기적으로 처리할 수 있습니다.

Celery는 파이썬 기반의 분산 작업 큐입니다. 비동기 작업을 처리하기 위해 메시지 브로커인 RabbitMQ, Redis, Kafka 등과 함께 사용됩니다. Celery를 사용하면 이미지 처리 작업을 큐에 넣고 백그라운드에서 비동기적으로 처리할 수 있습니다.

다음은 Celery를 활용한 이미지 처리를 위한 예제 코드입니다.

from celery import Celery
from PIL import Image

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

@app.task
def process_image(image_path):
    image = Image.open(image_path)
    # 이미지 처리 작업 수행
    # ...
    # 처리된 이미지 저장
    image.save('processed_image.jpg')

if __name__ == '__main__':
    app.start()

위의 코드에서는 Celery를 사용하여 process_image라는 비동기 작업을 정의하고 있습니다. 작업은 이미지 경로를 인자로 받고, 해당 이미지를 열어 처리한 뒤 처리된 이미지를 저장합니다.

이제 이미지 처리를 호출하는 코드를 작성해보겠습니다.

from image_processing import process_image

# 이미지 처리 작업을 큐에 추가
process_image.delay('sample_image.jpg')

위의 코드에서는 process_image 작업을 호출할 때 delay 메소드를 사용합니다. 이로써 해당 작업은 Celery 큐에 추가되고, Celery 워커가 비동기적으로 작업을 처리합니다.

이와 같이 Celery를 활용하여 이미지 처리를 비동기적으로 처리하면 높은 성능과 사용자 경험 향상을 기대할 수 있습니다.

참고 자료:

#async #Celery