소개
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_limit
및 task_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초로 설정했습니다. 작업이 실행되는 동안 이러한 제한 시간을 초과하면 예외가 발생하게 됩니다.