Download - Celery의 빛과 그림자
![Page 1: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/1.jpg)
Celery의 빛과 그림자PYCON KOREA 2015
정민영 THE BEATPACKING COMPANY
![Page 2: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/2.jpg)
발표자
• 정민영
• 비트패킹컴퍼니 CTO
• PyconKR 2014/Deview 2014 ‘제약을 넘어: Gevent’ 발표 (Deview 2014 Top 10)
• AWSKRUG Founder / AWS Community Hero
![Page 3: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/3.jpg)
이런 분들을 위해 준비했어요!
• 비동기 처리를 해야되긴 한다던데… 뭐가 뭔지 모르겠던 분!
• Celery가 뭔가 좋은거 같긴한데…써도 되나 의심스러우셨던 분들!
• Celery를 쓰고 있는데 뭔가 작동이 이상해서 고민이셨던 분 들!
![Page 4: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/4.jpg)
Celery?
![Page 5: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/5.jpg)
Distributed Task Queue
![Page 6: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/6.jpg)
혹은
![Page 7: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/7.jpg)
(종합적인)비동기 처리기
![Page 8: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/8.jpg)
비동기 처리기?
![Page 9: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/9.jpg)
비동기 처리기는 왜 필요한걸까?
고갱님 어떤 서비스
진지하게 가입을 해볼까?
이메일, 이름, .. 좋아 가입!
![Page 10: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/10.jpg)
비동기 처리기는 왜 필요한걸까?
어떤 서비스
진지하게 가입을 해볼까?
이메일, 이름, .. 좋아 가입!
에.. 고객님 프로필 사진을 업로드하고.. 크기도 적당히
3개쯤 준비해두고..
고갱님
![Page 11: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/11.jpg)
비동기 처리기는 왜 필요한걸까?
어떤 서비스
진지하게 가입을 해볼까?
이메일, 이름, .. 좋아 가입!
에.. 고객님 프로필 사진을 업로드하고.. 크기도 적당히 3개쯤 준비해두고.. 요즘 유행이니까 배경 블러도 만들
어 두고…
고갱님
![Page 12: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/12.jpg)
비동기 처리기는 왜 필요한걸까?
어떤 서비스
진지하게 가입을 해볼까?
이메일, 이름, .. 좋아 가입!
에.. 고객님 프로필 사진을 업로드하고.. 크기도 적당히 3개쯤 준비해두고.. 요즘 유행이니까 배경 블러도 만들어 두고… 아 친구도 찾아드려야 하는데 까먹을뻔 했
네 데헷(*^^*)..
고갱님
![Page 13: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/13.jpg)
비동기 처리기는 왜 필요한걸까?
어떤 서비스
에.. 고객님 프로필 사진을 업로드하고.. 크기도 적당히 3개쯤 준비해두고.. 요즘 유행이니까 배경 블러도 만들어 두고… 아 친구도 찾아드려야 하는데 까먹을뻔 했네 데헷(*^^*).. 자 다했다 이제 이메일 보내드려야지!
![Page 14: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/14.jpg)
비동기 처리기는 왜 필요한걸까?
어떤 서비스
어…어.. 고..고갱님??
![Page 15: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/15.jpg)
비동기 처리기는 왜 필요한걸까?
• 비동기 처리기는 동기적으로 수행하지 않아도 되는 일들을 처리해 주는 역활을 합니다.
• 즉 결과를 즉시 받을 필요 없거나, 지연하여 처리해야 되는 일들을 보통 처리합니다.
• 물론 그것이 제대로 처리가 되지 않아도 된다는 이야기는 아니기 때문에, 별도의 잘 만들어진 처리기가 필요해요!
![Page 16: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/16.jpg)
그런데 왜 꼭 여야 하나요?
![Page 17: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/17.jpg)
근데 왜 꼭 Celery여야 하죠?
• 완전 쉽게 연동할 수 있어요!
• (아마도) 당신이 상상할 수 있는 모든 기능을 제공해요!
• 일단 남들이 제일 많이 써요!
![Page 18: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/18.jpg)
Celery… 너란 채소….
![Page 19: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/19.jpg)
완전 쉽게 연동할 수 있어요!
from����������� ������������������ celery����������� ������������������ import����������� ������������������ Celeryapp����������� ������������������ =����������� ������������������ Celery('hello',����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ broker='amqp://guest@localhost//')����������� ������������������
@app.taskdef����������� ������������������ add(a,����������� ������������������ b):����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ return����������� ������������������ a����������� ������������������ +����������� ������������������ b
![Page 20: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/20.jpg)
완전 쉽게 연동할 수 있어요!
from����������� ������������������ tasks����������� ������������������ import����������� ������������������ addadd.delay(1,����������� ������������������ 2)����������� ������������������
![Page 21: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/21.jpg)
완전 쉽게 연동할 수 있어요!
from����������� ������������������ tasks����������� ������������������ import����������� ������������������ addr����������� ������������������ =����������� ������������������ add(1,����������� ������������������ 2)r.get(timeout=1)����������� ������������������
![Page 22: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/22.jpg)
완전 쉽게 연동할 수 있어요!
![Page 23: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/23.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
![Page 24: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/24.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
![Page 25: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/25.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
T.delay(arg,����������� ������������������ kwarg=value)����������� ������������������ !T.apply_async((arg,����������� ������������������ ),����������� ������������������ {'kwarg':����������� ������������������ value})����������� ������������������ !T.apply_async(countdown=10)����������� ������������������ !T.apply_async(eta=now����������� ������������������ +����������� ������������������ timedelta(seconds=10))����������� ������������������ !T.apply_async(countdown=60,����������� ������������������ expires=120)����������� ������������������ !T.apply_async(expires=now����������� ������������������ +����������� ������������������ timedelta(days=2))����������� ������������������
![Page 26: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/26.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
>>> from celery import chain
# 2 + 2 + 4 + 8 >>> res = chain(add.s(2, 2), add.s(4), add.s(8))() >>> res.get() 16
![Page 27: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/27.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
>>> from celery import chain !# 2 + 2 + 4 + 8 >>> res = chain(add.s(2, 2), add.s(4), add.s(8))() >>> res.get() 16 !>>> (add.s(2, 2) | add.s(4) | add.s(8))().get() 16
![Page 28: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/28.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
new_user_workflow = (create_user.s() | group( import_contacts.s(), send_welcome_email.s()) ) new_user_workflow.delay(username='artv', first='Art', last='Vandelay', email='[email protected]')
![Page 29: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/29.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
from datetime import timedelta !CELERYBEAT_SCHEDULE = { 'add-every-30-seconds': { 'task': 'tasks.add', 'schedule': timedelta(seconds=30), 'args': (16, 16) }, } !CELERY_TIMEZONE = 'UTC'
![Page 30: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/30.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
![Page 31: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/31.jpg)
(아마도) 당신이 상상할 수 있는 모든 기능
![Page 32: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/32.jpg)
뭐… 좋은건 알겠는데….
![Page 33: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/33.jpg)
There ain't no such thing as a free lunch
![Page 34: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/34.jpg)
There ain't no such thing as a free lunch
![Page 35: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/35.jpg)
– kkung
비트 성장의 가장 첫번째 난관은 셀러ㄹ…
![Page 36: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/36.jpg)
![Page 37: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/37.jpg)
–고..고갱님
푸시가 새벽 2시에 왔습니다. 미ㅊ..거 아닙니까?
![Page 38: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/38.jpg)
![Page 39: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/39.jpg)
잘 알고 써야 하는 Celery!
• 적은 규모에서, 간편하게 쓰기에는 더 없이 훌륭하지만…
• 의외로 조금만 규모가 커져도 신경써야 할 부분이 많아요!
• 특히 처음부터 고려하지 않으면 알 수 없는 이상작동처럼 느껴질 수도 있으니 주의가 필요한 부분이 있어요!
![Page 40: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/40.jpg)
Broker
![Page 41: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/41.jpg)
![Page 42: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/42.jpg)
나..나쁜거?
![Page 43: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/43.jpg)
어떤 녀석이 일(Task)을 처리할지 중개(Broker)
![Page 44: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/44.jpg)
Celery 구조
Web APP Broker
Worker
Worker
Worker
![Page 45: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/45.jpg)
Celery는 무수히 많은 Broker를 지원 하지만..
![Page 46: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/46.jpg)
![Page 47: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/47.jpg)
AMQP 모사 일부 기능 제한
![Page 48: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/48.jpg)
AMQP 모사 일부 기능 제한
![Page 49: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/49.jpg)
특히 AMQP중에서도..
![Page 50: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/50.jpg)
![Page 51: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/51.jpg)
RabbitMQ is the default broker so it does not require any additional
dependencies or initial configuration
![Page 52: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/52.jpg)
그래도 굳이 다른 Broker를 쓰시겠다면….
![Page 54: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/54.jpg)
ack, visibility_timeout
![Page 55: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/55.jpg)
ackBroker Worker
Message
Ack
Consume
![Page 56: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/56.jpg)
ack + visibility timeoutBroker Worker
Message
Message
Visibility Timeout
![Page 57: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/57.jpg)
Redis/SQS에서의 visibility timeout
• visibility timeout내에 ack가 전달되지 않으면, task가 중복 실행됩니다.
• eta, countdown 시간보다 visibility timeout이 커야해요.
• AWS SQS의 최대 시간 제한은 12시간!
![Page 58: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/58.jpg)
그 외의 고생길(!)
• Redis는 메모리가 부족한 상황에서 임의로 key가 삭제될 수 있어요!
• SQS는 API요청당 과금을 하고, Pub/Sub이 아닌 Polling모델 이에요. 자주 땡길(!)수록 요금이 나와요.
• SQS를 Broker로 사용하면 Celery의 주요한 모니터링 기능 대부분을 사용할 수 없어요.
![Page 59: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/59.jpg)
왜 고생을 사서 하는 거죠? ….
![Page 60: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/60.jpg)
prefetch의 배신
![Page 61: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/61.jpg)
prefetch의 배신(?)
• prefetch에 대한 일반적인 기대는….
• Task들을 그냥 미리 땡겨두는거죠. 심플하게. 다른 뜻 없이.
• 여기에 무슨 다른 오해의 소지가 있겠어…?
![Page 62: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/62.jpg)
S S S L S S S S
S S S L
prefetch : 4
L S S S
queue size : 8
concurrency: 1
![Page 63: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/63.jpg)
이렇게 되는거 아냐? 라고 생각하셨다면…
![Page 64: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/64.jpg)
![Page 65: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/65.jpg)
아니 진짜… 진짜… 이거 아냐…?
![Page 66: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/66.jpg)
Prefetch is a term inherited from AMQP that is often misunderstood by users.
![Page 67: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/67.jpg)
The prefetch limit is a limit for the number of tasks (messages) a worker can reserve for itself
![Page 68: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/68.jpg)
S S S L S S S S
S S S L
prefetch : 4
L / / /
queue size : 8
S S S S
concurrency: 1
![Page 69: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/69.jpg)
오해받기 쉬운 그/그녀 prefetch….
• prefetch된 단위 전체의 작업을 소비해야(ack*) 다음 prefetch가 수행 됩니다.
• task가 비워지는 대로 다음 task를 broker에서 가져올꺼라는 일반적인 기대와 차이가 있어요!(often misunderstood)
• 물론 task payload의 크기가 적고, latency가 중요하다면 합리적인 결정이기도 합니다.
![Page 70: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/70.jpg)
![Page 71: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/71.jpg)
Prefork pool prefetch
![Page 72: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/72.jpg)
P1PA P2
T1
T2
T3
![Page 73: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/73.jpg)
-ofair
![Page 74: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/74.jpg)
그런데 무조건 쓸 수 있는건 아니고요….
![Page 75: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/75.jpg)
에헤이.. 방법이 있겠죠? 좀 나눕시다 에헤
![Page 76: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/76.jpg)
![Page 77: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/77.jpg)
Task를 한 큐에 담지 마세요!
• prefetch의 특성상 평균 수행 시간이 비슷한 것들이 같은 Queue에 있는 것이 성능상 훨씬 유리합니다.
• 또한 Task의 절대적인 수 자체도 중요한 요소에요.
• 처리의 중요도/시급도(Priority)에 따른 분류도 중요해요.
• 위와 같은 요소를 고려해서 Queue를 나눠 주세요
![Page 78: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/78.jpg)
CELERY_ROUTES����������� ������������������ =����������� ������������������ {����������� ������������������
����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ 'feed.tasks.import_feed':����������� ������������������ {����������� ������������������
����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ 'queue':����������� ������������������ 'feeds'����������� ������������������
����������� ������������������ ����������� ������������������ ����������� ������������������ ����������� ������������������ }����������� ������������������
}����������� ������������������
![Page 79: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/79.jpg)
$ celery -A pykr worker -Q feeds
![Page 80: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/80.jpg)
정말 간단한데 성능에 큰 영향을 주는
또 다른 요소
![Page 81: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/81.jpg)
무시를 무시하지 마세요
![Page 82: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/82.jpg)
무시를 무시하지 마세요?
![Page 83: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/83.jpg)
![Page 84: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/84.jpg)
ignore_result
![Page 85: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/85.jpg)
ignore_result
• Celery는 기본적으로 수행 결과(return)를 ‘저장’ 해야 작업이 끝납니다.
• 하지만 대부분 Task내에서 직접 결과를 다른 곳에 저장하지, `return` 자체를 쓰는 경우는 드물어요!
• 보통은 Task 연계를 하는 경우만 필요하답니다!
• 결과를 저장하는 비용이 적지 않기 때문에 이걸 끄기만 해도 무척 성능이 좋아져요!
![Page 86: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/86.jpg)
그래서 Celery를 쓰라는거야 말라는 거야…?
![Page 87: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/87.jpg)
잘 쓰면 됩니다!
![Page 88: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/88.jpg)
![Page 89: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/89.jpg)
그래도 역시 Celery!
• 비록 여러 어려움을 설명하긴 했지만, 이는 꼭 잘못된 디자인/구현 이라기 보다는 여러 제약속에서 특정 선택을 했을 뿐인 경우가 많아요!
• Celery 없이 문제를 해결하려다 보면 결국 바퀴를 다시 만들게 되는 경우가 많아요!
• Celery는 요집도 조집도 우리집도 너희집도 많이 쓰기 때문에 같이 어려운 문제를 같이 해결해 줄 사람이 많아요!
• 본래 ‘분산’ ‘비동기’ 이런 단어 들어가면 복잡도가 만배(…)
![Page 90: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/90.jpg)
감사합니다.
![Page 91: Celery의 빛과 그림자](https://reader031.vdocuments.mx/reader031/viewer/2022020802/5888a5831a28ab264b8b69b3/html5/thumbnails/91.jpg)
절 찬 채 용 중
부 스 상 담 환 영