[python] Celery의 리소스 제한 설정 방법은 어떻게 되는가?

소개

Celery는 Python으로 작성된 분산 작업 큐 시스템입니다. 리소스 제한은 Celery 워커(worker)가 사용할 수 있는 CPU 및 메모리 제한을 설정하는 방법을 말합니다. 이를 통해 여러 워커가 동시에 실행될 때 시스템 자원을 효율적으로 사용할 수 있습니다.

리소스 제한 설정

CPU 제한 설정

Celery에서는 --concurrency 옵션을 사용하여 동시에 실행될 워커 수를 지정할 수 있습니다. 이를 통해 CPU 사용량을 조절할 수 있습니다. 예를 들어, 아래와 같이 명령어를 실행하여 4개의 워커를 실행할 수 있습니다.

celery worker --concurrency=4

메모리 제한 설정

Celery 워커가 사용할 수 있는 메모리 양을 제한하려면, 운영 체제의 메모리 제한 기능을 사용하면 됩니다. 예를 들어, Linux 운영 체제에서 ulimit 명령어를 사용하여 메모리 제한 값을 설정할 수 있습니다.

ulimit -m 512000  # 메모리 제한을 512MB로 설정
celery worker

메모리 제한은 워커가 할당하는 메모리 양을 제한하기 때문에, 너무 작은 값으로 설정하면 워커가 실행 중에 오류가 발생할 수 있습니다. 적절한 메모리 제한 값을 설정하는 것이 중요합니다.

특정 작업에 대한 리소스 제한 설정

Celery에서는 특정 작업에 대해 리소스 제한을 설정하는 기능을 제공합니다. task_soft_time_limittask_time_limit 옵션을 사용하여 작업에 대한 실행 시간 제한을 설정할 수 있습니다. 이렇게 설정하면 작업의 실행 시간이 제한을 초과할 경우 워커가 작업을 중단하고 예외를 발생시킵니다.

from celery import Celery

app = Celery('myapp', broker='pyamqp://guest@localhost//')

@app.task(
    soft_time_limit=30,  # 작업의 실행 시간이 30초를 초과하면 SoftTimeLimitExceeded 예외 발생
    time_limit=60  # 작업의 실행 시간이 60초를 초과하면 TimeLimitExceeded 예외 발생
)
def my_task():
    # 작업의 코드 작성
    pass

위의 코드에서는 my_task 함수에 대해 SoftTimeLimitExceeded 예외를 30초, TimeLimitExceeded 예외를 60초로 설정했습니다. 작업이 실행되는 동안 이러한 제한 시간을 초과하면 예외가 발생하게 됩니다.

참고 자료