[python] Celery로 대량의 이미지 처리를 비동기적으로 처리하는 방법은 어떻게 되는가?

일반적으로 이미지 처리 작업은 시간이 많이 소요될 수 있으며, 대량의 이미지를 처리해야 하는 경우에는 효율성이 떨어질 수 있습니다. 이러한 문제를 해결하기 위해 Celery와 같은 비동기 작업 큐를 사용하여 이미지 처리 작업을 비동기적으로 처리할 수 있습니다.

1. Celery 설치

먼저, Celery를 설치해야 합니다. 다음의 명령어를 사용하여 설치합니다:

pip install celery

2. Celery 작업자(worker) 설정

Celery를 사용하기 위해 작업자(worker)를 설정해야 합니다. 작업자는 큐에 있는 작업을 처리하는 역할을 담당합니다. tasks.py라는 파일을 생성하고 다음의 코드를 입력합니다:

from celery import Celery

# Celery 객체 생성
app = Celery('image_processing', broker='amqp://guest@localhost//')

# 이미지 처리 작업 정의
@app.task
def process_image(image_path):
    # 이미지 처리 코드 작성
    # ...

위의 코드에서 image_processing은 작업자의 이름을 나타내며, broker는 작업 큐를 관리하는 브로커의 URL을 나타냅니다. 예시에서는 로컬 머신에서 RabbitMQ를 사용하고 있습니다.

3. 이미지 처리 작업 생성 및 실행

이제 이미지 처리 작업을 생성하고 실행할 수 있습니다. 다음의 코드를 사용하여 이미지 처리 작업을 생성하고 큐에 추가합니다:

from tasks import process_image

# 이미지 파일 경로 리스트
image_paths = ['image1.jpg', 'image2.jpg', 'image3.jpg']

# 이미지 처리 작업 큐에 추가
for image_path in image_paths:
    process_image.delay(image_path)

위의 코드에서 image_paths는 처리해야 할 이미지 파일의 경로를 담고 있습니다. process_image.delay(image_path)를 호출하여 이미지 처리 작업을 큐에 추가합니다. delay() 메서드를 사용하면 비동기적으로 작업이 실행됩니다.

4. 작업 결과 확인

작업이 비동기적으로 실행되므로 작업이 완료되었는지를 확인해야 합니다. 작업의 결과를 확인하기 위해 다음의 코드를 사용할 수 있습니다:

from tasks import process_image

# 이미지 파일 경로
image_path = 'image.jpg'

# 이미지 처리 작업 실행
result = process_image.delay(image_path)

# 작업 결과 확인
if result.ready():
    result_value = result.get()
    # 작업 결과 처리
    # ...
else:
    # 작업이 아직 완료되지 않음
    # ...

위의 코드에서 result.ready()를 사용하여 작업이 완료되었는지를 확인한 후, result.get()을 사용하여 작업의 결과를 가져옵니다.

이제 Celery를 사용하여 대량의 이미지 처리 작업을 비동기적으로 처리할 수 있습니다. Celery의 강력한 기능을 활용하여 이미지 처리 작업의 성능을 향상시킬 수 있습니다.

참고 자료