๊ทธ๋ฃน์์ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ์์ ์์ ์ด๋ฆ์ ์ก์ธ์คํ๋ ค๊ณ ํ๋ฉด ์์์ด ๋ฐํ๋ฉ๋๋ค.
ํ์ด์ฌ: 3.3.6, 3.4.2
์
๋ฌ๋ฆฌ: 3.1.17
ํ๋ก์ ํธ/์ ๋ฌ๋ฆฌ.py
from celery import Celery
app = Celery('proj',
broker='amqp://',
backend='amqp://',
include=['proj.tasks'])
# Optional configuration, see the application user guide.
app.conf.update(
CELERY_TASK_RESULT_EXPIRES=3600,
)
if __name__ == '__main__':
app.start()
ํ๋ก์ ํธ/์์ .py
from proj.celery import app
@app.task
def add(x, y):
return x + y
@app.task
def mul(x, y):
return x * y
run_add.py
from celery import group
from proj import tasks
import logging
log = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
results = group([
tasks.mul.s(4,4),
tasks.add.s(3,3)
]).delay()
while results.waiting():
pass
if results.successful():
for result in results:
log.info('ID: {}, name: {}'.format(result.task_id, result.task_name))
๊ฒฐ๊ณผ:
INFO:__main__:ID: c2fa4f30-0691-41ee-8f7b-e7dcbf32d09a, name: None
INFO:__main__:ID: f545bfa0-2ad7-40b3-9d05-561d4c1eba7e, name: None
๊ฐ์ ์ผ์ด ์ฒด์ธ์์๋ ๋ฐ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๊ฒ์ ๋ํ stackoverflow ๊ฒ์๋ฌผ๋ ์์ต๋๋ค.
์ ๋ฌ๋ฆฌ์์ ์ฒด์ธ์ ์ ์ถํ ๋ AsyncResult์์ task_name ๊ฐ์ ธ์ค๊ธฐ
task_name์ ๋ก์ปฌ ํ๋์ด๋ฉฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ์์ ํ ์ ๊ฑฐ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ์ก๋ ๊ฒฐ๊ณผ์๋ ์ค์ ๋ก ์ด๋ฆ ํ๋๊ฐ ์์ผ๋ฉฐ, ํผํด์ ์ฌ์ฉํ ๋ ๋ฐฑ์๋๋ฅผ ๊ฒฐ๊ณผ๋ก ์ง๋ ฌํํ๋ ๋ฐ ์ด๋ ์์ ์ ์ฌ์ฉ๋์์ง๋ง ์ง๊ธ์ ๋ค๋ฅด๊ฒ ์ํ๋ฉ๋๋ค.
@ask ์ง๊ธ task_name์ ๊ฐ์ ธ์ฌ ๋ฐฉ๋ฒ์ด ์๋์? ์น์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ ธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋์ ์ด ์์ผ๋ฉฐ AsyncResult๊ฐ ์ฃผ์ด์ง๋ฉด ์์ ์ด๋ฆ์ ๊ธฐ๋กํ๊ณ ์ถ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@ask ์ง๊ธ task_name์ ๊ฐ์ ธ์ฌ ๋ฐฉ๋ฒ์ด ์๋์? ์น์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ ธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋์ ์ด ์์ผ๋ฉฐ AsyncResult๊ฐ ์ฃผ์ด์ง๋ฉด ์์ ์ด๋ฆ์ ๊ธฐ๋กํ๊ณ ์ถ์ต๋๋ค.