
โ Celery ?
celery๋ ๋ถ์ฐ ๋ฉ์์ง ์ ๋ฌ์ ๊ธฐ๋ฐ์ ๋ ์คํ ์์ค ๋น๋๊ธฐ ํ ์คํฌ ํ, ์ก ํ์ด๋ค.
์ค์ผ์ค๋ง์ ์ง์ํ์ง๋ง ์ค์๊ฐ ์ด์์ ์ด์ ์ ๋๊ณ ์๋ค.
1๏ธโฃ ์์
redis๊ฐ ์คํ๋์ด ์์ด์ผ ํ๋ค. (์๋ ๋งํฌ ์ฐธ๊ณ )
[Redis] redis๋ฅผ ์์ํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ 2๊ฐ์ง (docker/source download)
โ Redis ? Remote Dictionary Server์ ์ฝ์๋ก์, "ํค-๊ฐ" ๊ตฌ์กฐ์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์คํ ์์ค ๊ธฐ๋ฐ์ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ด๋ค. 1๏ธโฃ Docker ๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ ์์
bonory.tistory.com
2๏ธโฃ ์ค์น
pip3 install celery
3๏ธโฃ ์คํ
tasks.py
from celery import Celery
app = Celery('tasks', broker = 'redis://localhost//')
app.conf.task_default_queue = 'default'
app.conf.task_queues = (
Queue('default', routing_key='task.#'),
)
@app.task
def long_task(x):
print(f"{x} : start")
pytime.sleep(10)
print(f"{x} : end")
return x
terminal ์์ celery worker server ์คํ
python3 -m celery -A tasks worker -Q default --loglevel=info
-------------- celery@MacBook-Pro.local v5.2.6 (dawn-chorus)
--- ***** -----
-- ******* ---- macOS-10.16-x86_64-i386-64bit 2022-05-30 09:33:30
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: tasks:0x7fef50fb9550
- ** ---------- .> transport: redis://localhost:6379
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 8 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> default exchange=default(direct) key=task.#
[tasks]
. tasks.long_task
[2022-05-30 09:33:30,586: INFO/MainProcess] Connected to redis://localhost:6379/0
[2022-05-30 09:33:30,588: INFO/MainProcess] mingle: searching for neighbors
[2022-05-30 09:33:31,598: INFO/MainProcess] mingle: all alone
[2022-05-30 09:33:31,620: INFO/MainProcess] celery@MacBook-Pro.local ready.
1. app : ํ์ฌ ์๋ฒ๋ก ๊ฐ๋ํ app์ ์ด๋ฆ๊ณผ ID
2. transport : message broker
3. result : task ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ผ backend (์ผ๋ฐ์ ์ผ๋ก celery๋ result backend๋ฅผ ์ง์ ํ์ง ์๋๋ค.)
4. concurrency : prework๋ worker ํ๋ก์ธ์ค ์ซ์ (์ผ๋ฐ์ ์ผ๋ก CPU ์ฝ์ด ์ซ์๋งํผ ๊ฐ๋๋๋ค.)
4๏ธโฃ ๋์์ฑ(concurrency, worker) ์ง์ ํ๊ธฐ
์ด๋ฒ์ ์งํํ ์์ ์ด ๊ธด ์๊ฐ์ด ์์๋๋ ์์ ์ด๋ค.
์์ฒญ์ด ๋ค์ด์ค๋ฉด queue ๋ฐฉ์์ผ๋ก ๋ค ์์๋๊ณ FIFO์ผ๋ก ํ๋์ฉ ์ฒ๋ฆฌํ๋ คํ๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ ๋์์ฑ์ 1๋ก ์ง์ ํด์ฃผ๊ธฐ ์ํด์๋ celery ์๋ฒ๋ฅผ ์คํ์ํฌ๋ `--concurrency=1` ๋ก ์ง์ ํด์ค๋ค.
python3 -m celery -A tasks worker -Q default --loglevel=info --concurrency=1
-------------- celery@MacBook-Pro.local v5.2.6 (dawn-chorus)
--- ***** -----
-- ******* ---- macOS-10.16-x86_64-i386-64bit 2022-05-30 09:32:44
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app: tasks:0x7f97a1069a00
- ** ---------- .> transport: redis://localhost:6379
- ** ---------- .> results: disabled://
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> default exchange=default(direct) key=task.#
[tasks]
. tasks.long_task
[2022-05-30 09:32:45,095: INFO/MainProcess] Connected to redis://localhost:6379/0
[2022-05-30 09:32:45,097: INFO/MainProcess] mingle: searching for neighbors
[2022-05-30 09:32:46,105: INFO/MainProcess] mingle: all alone
[2022-05-30 09:32:46,123: INFO/MainProcess] celery@MacBook-Pro.local ready.
โ๏ธ celery worker guide
Workers Guide โ Celery 5.2.7 documentation
This document describes the current stable version of Celery (5.2). For development docs, go here. Workers Guide You can start the worker in the foreground by executing the command: $ celery -A proj worker -l INFO For a full list of available command-line
docs.celeryq.dev
5๏ธโฃ ํ ์คํธ
์คํ ์ฝ๋
for i in range(1, 6):
long_task.apply_async(args=[i], queue='default')
์คํ ๊ฒฐ๊ณผ
[2022-05-30 09:44:24,594: INFO/MainProcess] Task tasks.long_task[e97349bd-1807-4019-906c-f61e10d3cbc1] received
[2022-05-30 09:44:24,596: INFO/MainProcess] Task tasks.long_task[a3d4ed9d-40b9-4a95-9b22-28c24f835b04] received
[2022-05-30 09:44:24,596: WARNING/ForkPoolWorker-1] 1 : start
[2022-05-30 09:44:24,597: INFO/MainProcess] Task tasks.long_task[6395d77d-708f-441e-8a93-fa47726f9b01] received
[2022-05-30 09:44:24,597: INFO/MainProcess] Task tasks.long_task[bfeec24d-96ba-4560-99b2-18faec595e03] received
[2022-05-30 09:44:24,598: INFO/MainProcess] Task tasks.long_task[6992e54a-0e86-4582-bbb4-4b9d66829a53] received
[2022-05-30 09:44:34,597: WARNING/ForkPoolWorker-1] 1 : end
[2022-05-30 09:44:34,600: INFO/ForkPoolWorker-1] Task tasks.long_task[e97349bd-1807-4019-906c-f61e10d3cbc1] succeeded in 10.004834291999998s: 1
[2022-05-30 09:44:34,605: WARNING/ForkPoolWorker-1] 2 : start
[2022-05-30 09:44:44,606: WARNING/ForkPoolWorker-1] 2 : end
[2022-05-30 09:44:44,608: INFO/ForkPoolWorker-1] Task tasks.long_task[a3d4ed9d-40b9-4a95-9b22-28c24f835b04] succeeded in 10.004181875000002s: 2
[2022-05-30 09:44:44,611: WARNING/ForkPoolWorker-1] 3 : start
[2022-05-30 09:44:54,613: WARNING/ForkPoolWorker-1] 3 : end
[2022-05-30 09:44:54,615: INFO/ForkPoolWorker-1] Task tasks.long_task[6395d77d-708f-441e-8a93-fa47726f9b01] succeeded in 10.004144500000002s: 3
[2022-05-30 09:44:54,618: WARNING/ForkPoolWorker-1] 4 : start
[2022-05-30 09:45:04,619: WARNING/ForkPoolWorker-1] 4 : end
[2022-05-30 09:45:04,620: INFO/ForkPoolWorker-1] Task tasks.long_task[bfeec24d-96ba-4560-99b2-18faec595e03] succeeded in 10.002915666s: 4
[2022-05-30 09:45:04,621: WARNING/ForkPoolWorker-1] 5 : start
[2022-05-30 09:45:14,622: WARNING/ForkPoolWorker-1] 5 : end
[2022-05-30 09:45:14,623: INFO/ForkPoolWorker-1] Task tasks.long_task[6992e54a-0e86-4582-bbb4-4b9d66829a53] succeeded in 10.003116958s: 5
โ๏ธ celery routing์ ๋ํ ์ค์ ๊ฐ ๊ด๋ จ guide
Routing Tasks โ Celery 5.2.7 documentation
This document describes the current stable version of Celery (5.2). For development docs, go here. Routing Tasks Note Alternate routing concepts like topic and fanout is not available for all transports, please consult the transport comparison table. The s
docs.celeryq.dev
'๐ฉ๐ปโ๐ป > celery + redis' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Redis and Celery (0) | 2025.02.12 |
---|---|
Celery๋ฅผ ์ด์ฉํ ํฌ๋กค๋ง ์์ (1) | 2025.02.05 |
[Redis] Redis์ ๋ํ ๊ฐ๋จํ ์ ๋ฆฌ (0) | 2023.12.04 |
[Flower] Monitoring Celery Tasks using Flower (1) | 2022.06.20 |
[Redis] redis๋ฅผ ์์ํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ 2๊ฐ์ง (docker/source download) (0) | 2022.06.06 |