Celery 예제
23 Dec 2021 | Python Redis CeleryPython에서 Celery 사용하기
Celery는 Task Queue입니다. RabbitMQ나 Redis 등을 백엔드로 사용하며 그 위에서 Wrapper로 추상화된
인터페이스를 제공해줍니다.
설치
pip3 install redis pip3 install celery
tasks.py
Task 실행 요청을 수신하는 서버측 코드입니다.
import time
from celery import Celery
BROKER_URL = 'redis://localhost:6379/0'
BACKEND_URL = 'redis://localhost:6379/1'
app = Celery('tasks', broker=BROKER_URL, backend=BACKEND_URL)
@app.task(name="snowdeer_add")
def add(x, y):
for i in range(1, 10):
print("Calculating ...")
time.sleep(0.5)
return x + y
실행은 일반적인 python3로 하는 것이 아니라 아래의 명령어로 실행합니다.
$ celery -A tasks worker --loglevel=info
-------------- celery@Choongs-MacBook-Pro.local v5.2.1 (dawn-chorus)
--- ***** -----
-- ******* ---- macOS-12.0.1-arm64-arm-64bit 2021-12-25 19:59:29
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: tasks:0x10273e430
- ** ---------- .> transport: redis://localhost:6379/0
- ** ---------- .> results: redis://localhost:6379/1
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. snowdeer_add
[2021-12-25 19:59:29,936: INFO/MainProcess] Connected to redis://localhost:6379/0
[2021-12-25 19:59:29,945: INFO/MainProcess] mingle: searching for neighbors
[2021-12-25 19:59:30,982: INFO/MainProcess] mingle: all alone
[2021-12-25 19:59:31,035: INFO/MainProcess] celery@snowdeer-MacBook-Pro.local ready.
client.py
from tasks import add
f = add.apply_async(args=[2, 3, ])
result = f.get(timeout=10)
print(f"result: {result}")
단순히 Task만 요청하고 싶을 때는 add.apply_async(args=[2, 3, ]) 대신 add.delay(2, 3)과 같은 코드로
대신할 수도 있습니다.