๋ฌธ์ ๋ ๋ฌด์ธ Google ๊ทธ๋ฃน ๊ฒ์๋ฌผ์ ์ฌ๊ฒ์์ ๋๋ค . _๋์ผํ ์์ ์ด ์ฌ๋ฌ ๋ฒ ์คํ๋๋์?_
> ./bin/celery -A celery_app report
software -> celery:4.1.0 (latentcall) kombu:4.1.0 py:3.6.1
billiard:3.5.0.3 redis:2.10.6
platform -> system:Linux arch:64bit, ELF imp:CPython
loader -> celery.loaders.app.AppLoader
settings -> transport:redis results:redis://localhost:6379/2
broker_url: 'redis://localhost:6379/2'
result_backend: 'redis://localhost:6379/2'
task_serializer: 'json'
result_serializer: 'json'
accept_content: ['json']
timezone: 'Europe/Berlin'
enable_utc: True
imports: 'tasks'
task_routes: {
'tasks': {'queue': 'celery-test-queue'}}
๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ 2๊ฐ, ๋๋ก๋ 3๊ฐ์ ์์ ์ผ๋ก ๊ตฌ์ฑ๋ ๋จ์ผ ๊ทธ๋ฃน์ ์์ฝํ๋ฉฐ ๊ฐ ์์ ์๋ 1์๊ฐ ์ด๋ด์ ๊ณ ์ ํ ETA๊ฐ ์์ต๋๋ค. ETA๊ฐ ๋์ฐฉํ๋ฉด ๋ด ์ ๋ฌ๋ฆฌ ๋ก๊ทธ์ ๋ค์์ด ํ์๋ฉ๋๋ค.
[2017-11-20 09:55:34,470: INFO/ForkPoolWorker-2] Task tasks._test_exec[bd08ab85-28a8-488f-ba03-c2befde10054] succeeded in 33.81780316866934s: None
[2017-11-20 09:55:34,481: INFO/ForkPoolWorker-2] Task tasks._test_exec[bd08ab85-28a8-488f-ba03-c2befde10054] succeeded in 0.009824380278587341s: None
[2017-11-20 09:55:34,622: INFO/ForkPoolWorker-2] Task tasks._test_exec[bd08ab85-28a8-488f-ba03-c2befde10054] succeeded in 0.14010038413107395s: None
โฆ
[2017-11-20 09:55:37,890: INFO/ForkPoolWorker-8] Task tasks._test_exec[bd08ab85-28a8-488f-ba03-c2befde10054] succeeded in 0.012678759172558784s: None
[2017-11-20 09:55:37,891: INFO/ForkPoolWorker-2] Task tasks._test_exec[bd08ab85-28a8-488f-ba03-c2befde10054] succeeded in 0.01177949644625187s: None
[2017-11-20 09:55:37,899: INFO/ForkPoolWorker-8] Task tasks._test_exec[bd08ab85-28a8-488f-ba03-c2befde10054] succeeded in 0.008250340819358826s: None
โฆ
์ด๊ฒ์ ์์ญ ๋ฒ ๋ฐ๋ณต๋ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์ ์ ์คํ ์๊ฐ์ 33์ด์ด๋ฉฐ ๋ค๋ฅธ ์์ ์๋ฅผ ์ฌ์ฉํฉ๋๋ค!
๋๋ ์ด ํ๋์ ๋ํ ์ค๋ช ์ด ์์ผ๋ฉฐ ์ฌ๊ธฐ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ดํดํ๊ณ ์ถ์ต๋๋ค.
์๋ง๋ ์ด๊ฒ์ ๊ฐ์์ฑ ์๊ฐ ์ด๊ณผ ์ ๊ด๋ จ์ด ์์ต๋๊น?
@georgepsarakis ์ํน์ ๋ํด ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
๋ด๊ฐ ์๋ ํ ์ด๊ฒ์ AMQP์ ๊ธฐ๋ณธ ์ ๊ณต ์น์ธ ํน์ฑ ์ด ์๋ ๋ธ๋ก์ปค ์ ์ก์ ๋ํด ์๋ ค์ง ๋ฌธ์ ์ ๋๋ค. ์์ ์๋ฃ ์๊ฐ์ด ๊ฐ์์ฑ ์ ํ ์๊ฐ์ ์ด๊ณผํ๋ฉด ์์ ์ด ์ ์์ ์์๊ฒ ํ ๋น๋๋ฏ๋ก ์์ ์ด ๋ณ๋ ฌ๋ก ์คํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
@georgepsarakis ์์ ์ด ํจ์ฌ ๋ ๋จผ ๋ฏธ๋์ ์์ ๋์ด ์๋ค๋ฉด ์์ ๋ด์ฉ์ ๋ณผ ์ ์์๊น์? "๊ฐ์์ฑ ์๊ฐ ์ด๊ณผ"๊ฐ ์ด๋ฅผ ํด๊ฒฐํฉ๋๊น? ๋งํฌ ํ ๋ฌธ์์์ :
Redis์ ๊ธฐ๋ณธ ๊ฐ์์ฑ ์ ํ ์๊ฐ์ 1์๊ฐ์ ๋๋ค.
ํ ์๊ฐ ๋ด์ ์์ ์๊ฐ ์์ ์ ์น์ธํ์ง ์์ผ๋ฉด(์ฆ, ์คํํฉ๋๊น?) ํด๋น ์์ ์ ์น์ธํ์ง ์์ ๋ค๋ฅธ ์์ ์์๊ฒ ์ ์ก๋๋ ์์ ๋๋ค... ์ค์ ๋ก ์ด๊ฒ์ ๋ค์์ ๊ฒฝ๊ณ ์น์ ์ ๋ณด๋ ๊ฒฝ์ฐ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์; ์ด ๊ด๋ จ ๋ฌธ์ https://github.com/celery/kombu/issues/337; ๋๋ ์ด ๋ธ๋ก๊ทธ ์์ ์ธ์ฉ:
๊ทธ๋ฌ๋ ๊ฐ๋ฐ์๊ฐ ๋ง ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ์ ๊ธฐ์ ์ผ๋ก ์์ ์์ ๋น์ ์์ ์ธ ๋์, ํนํ ์ฌ๋ฌ ์์ ์๊ฐ ๋์ผํ ์์ ์ ์ฌ๋ฌ ๋ฒ ์คํํ๋ ๋ฌธ์ ์ ์ง๋ฉดํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ์์ธ์ ๊ฐ์์ฑ ์๊ฐ ์ด๊ณผ ์ค์ ์ ๋๋ค.
visibility_timeout
๋ฅผ 31,540,000์ด(1๋
)๋ก ์ค์ ํ๋ ๊ฒ์ด ๋น ๋ฅธ ์์ ์ผ ์ ์์ต๋๋ค.
๊ฐ์์ฑ ์ ํ ์๊ฐ์ 2์๊ฐ์ผ๋ก ๋๋ฆฌ๋ฉด ์์ ์ด ํ ๋ฒ๋ง ์คํ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๋ค์์ ๊ฒฐํฉํ๋ฉด:
๋๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ์๊ฐํ๋ค:
Redis ์ ์ก ๊ตฌํ์ ์ดํด๋ณด๋ฉด Sorted Sets๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐ ์๊ฐ์ zadd ์ ์ ์๋ก ์ ๋ฌํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋ฉ์์ง๋ ํด๋น ํ์์คํฌํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณต์๋๋ฉฐ ๊ฐ์์ฑ ํ์์์ ๊ณผ ๋์ผํ ๊ฐ๊ฒฉ๊ณผ ๋น๊ต๋ฉ๋๋ค.
์ด๊ฒ์ด Redis ์ ์ก์ ๋ด๋ถ๋ฅผ ์ฝ๊ฐ ์ค๋ช ํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@georgepsarakis , ๋๋ ์ด์ ์์ ํ ํผ๋์ค๋ฌ์ํฉ๋๋ค. ์์ ์ ETA๊ฐ ์ง๊ธ๋ถํฐ 2๊ฐ์๋ก ์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ ์์ ์๊ฐ ์์ ์ด ์์ฝ๋ ํ 1์๊ฐ ํ์ ์ด๋ฅผ ํฝ์ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
๋ด (์๋ชป๋?) ๊ฐ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ "_๋๋ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ์๊ฐํฉ๋๋ค:_"๋ ๋ด ๊ฐ์ ๊ณผ ์๋นํ ๋ค๋ฆ ๋๋ค.
์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ ํด๊ฒฐํ์ จ๋์? @jenstroeger
๊ฐ์ฌ ํด์!
@jenstroeger ๋ ์คํ ๊ฐ๋ฅํ ํ๋ฆ์ด ์๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๋๋ฐ ETA ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ ๋๊น์ง ์คํ์ ์ฐ๊ธฐํ๊ธฐ ์ํด ์์ ์๊ฐ ๊ณ์ ๋ฉ์์ง๋ฅผ requeueํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋๊ธฐ์ด์ ๊ฐ๋ ์ ๋ฉ์์ง๊ฐ ๋์ฐฉํ๋ ์ฆ์ ๋ฐฐํฌํ๋ ๊ฒ์ด๋ฏ๋ก ์์ ์๋ ๋ฉ์์ง๋ฅผ ๊ฒ์ฌํ๊ณ ๋๊ธฐ์ด์ ์ถ๊ฐํฉ๋๋ค.
์ด๊ฒ์ ๋ด ์ถ์ธก์ด๋ฉฐ ETA ๊ตฌํ์ ๋ด๋ถ๋ฅผ ์ค์ ๋ก ์์ง ๋ชปํฉ๋๋ค.
@zivsu , ์์์ ์ธ๊ธํ๋ฏ์ด visibility_timeout
์ _๋งค์ฐ_ ํฐ ์ซ์๋ก ์ค์ ํ๋๋ฐ ์ฆ์์ด ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ @georgepsarakis๊ฐ ์ง์ ํ๋ฏ์ด ์ด๋ ์ข์ง ์์ ์ ๊ทผ ๋ฐฉ์์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ ๋ฌธ์ ์ ์์ธ๋ ๋ชจ๋ฅด๊ณ , ์ด๋ป๊ฒ ์ ๋๋ก ๋์ฒํด์ผ ํ๋์ง๋ ๋ชจ๋ฆ ๋๋ค.
@jenstroeger ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๊ณ visibility_timeout
๋ฅผ ๋ณ๊ฒฝํด๋ ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒฐํ ์ ์์ผ๋ฏ๋ก ๋ณด์ปค๋ฅผ rabbitmq
๋ก ๋ณ๊ฒฝํฉ๋๋ค.
@zivsu , ๋ธ๋ก๊ทธ ๋งํฌ๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น? ์ด์ ์ Redis๋ฅผ ์ฌ์ฉํ์ จ์ต๋๊น?
@jenstroeger ๋ธ๋ก๊ทธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์ด์ ์ Redis๋ฅผ ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ์ต๋๋ค. ์ผ์ ์์ ์ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ค์ ๋ฐ์ํ์ง ์๋๋ก rebbitmq๋ฅผ ์ ํํฉ๋๋ค.
์ ํํ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ด ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฅ๊ณ ==1.11.6
์
๋ฌ๋ฆฌ==4.2rc2
django-celery-beat==1.0.1
์ค์ :
CELERY_ENABLE_UTC = True
# CELERY_TIMEZONE = 'America/Los_Angeles'
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ด ์ค์ ์ ์ ์ผํ ์๋ ์กฐํฉ์
๋๋ค. ๋ํ UTC ์๊ฐ๋์ ์ ๊ธฐ์ ์ธ ์์
์ ์์ฝํด์ผ ํฉ๋๋ค.
CELERY_TIMEZONE
๋ฅผ ํ์ฑํํ๊ฑฐ๋ CELERY_ENABLE_UTC
๋ฅผ ๋นํ์ฑํํ๋ฉด ์ฃผ๊ธฐ์ ์์
์ ์ฌ๋ฌ ๋ฒ ์คํํ๊ธฐ ์์ํฉ๋๋ค.
์ธ์ด๋ธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. eta ์์
์ redis๋ฅผ ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ ๋ ๊ณฑํ๊ธฐ ์๊ฐ์ ์คํํฉ๋๋ค.
์ด๊ฑฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ข..
redis์์ rabbitmq๋ก ๋ณ๊ฒฝ ๋ธ๋ก์ปค๊ฐ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค.
redis๋ฅผ ์ฌ์ฉํ๋ฉด UTC ์ด์ธ์ ์๊ฐ๋๋ฅผ ์ง์ ํ ๋ ์ ์๋ ค์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๊ธฐ๋ณธ ์ฑ์ ํ์ ๋ถ๋ฅํ๊ณ ๊ณ ์ ํ ์๊ฐ๋ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ธ์.
from celery import Celery
class MyAppCelery(Celery):
def now(self):
"""Return the current time and date as a datetime."""
from datetime import datetime
return datetime.now(self.timezone)
์ด ๋ฌธ์ ์ ์ง๋ฉดํ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ฉํฐ์ฝ์ด ๋จธ์ ์์ ๋นํธ๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ฌ๋ฆฌ ์์
์ ์์ฃผ ๋ค์ ์์ํ ๋ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด ps aux | grep celery
๋ค์ kill <each_pid>
์ ์คํํ๋ ์ต๊ด์ ๋ค์์ต๋๋ค.
์ ๊ฐ ๋๋ฆด ์ ์๋ ๊ฐ์ฅ ์ข์ ์กฐ์ธ์ ๊ธฐ๊ธฐ์์ ์ฐ๊ฒฐ์ ๋๊ธฐ ์ ์ ํญ์ "๋ค์ ์์ ์๋ฃ" ๋ฉ์์ง๊ฐ ํ์๋๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค.
{"log":"INFO 2018-10-09 17:41:08,468 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T17:41:08.468912644Z"}
{"log":"INFO 2018-10-09 17:41:08,468 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T17:41:08.468955918Z"}
{"log":"INFO 2018-10-09 19:46:04,293 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T19:46:04.293780045Z"}
{"log":"INFO 2018-10-09 19:46:04,293 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T19:46:04.293953621Z"}
{"log":"INFO 2018-10-09 20:46:04,802 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T20:46:04.802819711Z"}
{"log":"INFO 2018-10-09 20:46:04,802 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T20:46:04.802974829Z"}
{"log":"INFO 2018-10-09 21:46:05,335 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T21:46:05.336081133Z"}
{"log":"INFO 2018-10-09 21:46:05,335 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T21:46:05.336107517Z"}
{"log":"INFO 2018-10-09 22:46:05,900 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T22:46:05.901078395Z"}
{"log":"INFO 2018-10-09 22:46:05,900 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T22:46:05.901173663Z"}
{"log":"INFO 2018-10-09 23:46:06,484 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T23:46:06.485276904Z"}
{"log":"INFO 2018-10-09 23:46:06,484 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-09T23:46:06.485415253Z"}
{"log":"INFO 2018-10-10 00:46:07,072 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-10T00:46:07.072529828Z"}
{"log":"INFO 2018-10-10 00:46:07,072 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-10T00:46:07.072587887Z"}
{"log":"INFO 2018-10-10 01:46:07,602 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-10T01:46:07.60325321Z"}
{"log":"INFO 2018-10-10 01:46:07,602 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-10T01:46:07.603327426Z"}
{"log":"INFO 2018-10-10 02:46:08,155 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-10T02:46:08.155868992Z"}
{"log":"INFO 2018-10-10 02:46:08,155 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-10T02:46:08.155921893Z"}
{"log":"INFO 2018-10-10 03:46:08,753 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-10T03:46:08.75401387Z"}
{"log":"INFO 2018-10-10 03:46:08,753 strategy celery.worker.strategy 1 140031597243208 Received task: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] ETA:[2018-10-10 04:00:00+00:00] \n","stream":"stderr","time":"2018-10-10T03:46:08.754056891Z"}
{"log":"DEBUG 2018-10-10 04:00:00,013 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:70\n","stream":"stderr","time":"2018-10-10T04:00:00.013548928Z"}
{"log":"DEBUG 2018-10-10 04:00:00,013 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:70\n","stream":"stderr","time":"2018-10-10T04:00:00.013592318Z"}
{"log":"DEBUG 2018-10-10 04:00:00,013 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:71\n","stream":"stderr","time":"2018-10-10T04:00:00.014000106Z"}
{"log":"DEBUG 2018-10-10 04:00:00,013 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:71\n","stream":"stderr","time":"2018-10-10T04:00:00.014167558Z"}
{"log":"DEBUG 2018-10-10 04:00:00,014 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:64\n","stream":"stderr","time":"2018-10-10T04:00:00.014661348Z"}
{"log":"DEBUG 2018-10-10 04:00:00,014 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:64\n","stream":"stderr","time":"2018-10-10T04:00:00.014684354Z"}
{"log":"DEBUG 2018-10-10 04:00:00,014 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:65\n","stream":"stderr","time":"2018-10-10T04:00:00.01514884Z"}
{"log":"DEBUG 2018-10-10 04:00:00,014 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:65\n","stream":"stderr","time":"2018-10-10T04:00:00.015249646Z"}
{"log":"DEBUG 2018-10-10 04:00:00,015 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:66\n","stream":"stderr","time":"2018-10-10T04:00:00.01571124Z"}
{"log":"DEBUG 2018-10-10 04:00:00,015 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:66\n","stream":"stderr","time":"2018-10-10T04:00:00.01580249Z"}
{"log":"DEBUG 2018-10-10 04:00:00,019 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:68\n","stream":"stderr","time":"2018-10-10T04:00:00.019260948Z"}
{"log":"DEBUG 2018-10-10 04:00:00,019 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:68\n","stream":"stderr","time":"2018-10-10T04:00:00.019322151Z"}
{"log":"DEBUG 2018-10-10 04:00:00,245 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:70\n","stream":"stderr","time":"2018-10-10T04:00:00.245159563Z"}
{"log":"DEBUG 2018-10-10 04:00:00,245 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:70\n","stream":"stderr","time":"2018-10-10T04:00:00.245177267Z"}
{"log":"DEBUG 2018-10-10 04:00:00,245 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:67\n","stream":"stderr","time":"2018-10-10T04:00:00.245338722Z"}
{"log":"DEBUG 2018-10-10 04:00:00,245 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:67\n","stream":"stderr","time":"2018-10-10T04:00:00.245351289Z"}
{"log":"DEBUG 2018-10-10 04:00:00,256 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:65\n","stream":"stderr","time":"2018-10-10T04:00:00.256770035Z"}
{"log":"DEBUG 2018-10-10 04:00:00,256 request celery.worker.request 1 140031597243208 Task accepted: main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] pid:65\n","stream":"stderr","time":"2018-10-10T04:00:00.256788689Z"}
{"log":"INFO 2018-10-10 04:00:00,371 trace celery.app.trace 68 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.35710329699213617s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.371967002Z"}
{"log":"INFO 2018-10-10 04:00:00,371 trace celery.app.trace 68 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.35710329699213617s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.371983293Z"}
{"log":"INFO 2018-10-10 04:00:00,387 trace celery.app.trace 69 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.10637873200175818s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.388119538Z"}
{"log":"INFO 2018-10-10 04:00:00,387 trace celery.app.trace 69 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.10637873200175818s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.388166317Z"}
{"log":"INFO 2018-10-10 04:00:00,404 trace celery.app.trace 70 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.16254851799749304s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.404834545Z"}
{"log":"INFO 2018-10-10 04:00:00,404 trace celery.app.trace 70 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.16254851799749304s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.404862208Z"}
{"log":"INFO 2018-10-10 04:00:00,421 trace celery.app.trace 65 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.1654666289978195s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.421607856Z"}
{"log":"INFO 2018-10-10 04:00:00,421 trace celery.app.trace 65 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.1654666289978195s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.421674687Z"}
{"log":"INFO 2018-10-10 04:00:00,438 trace celery.app.trace 67 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.19588526099687442s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.438295459Z"}
{"log":"INFO 2018-10-10 04:00:00,438 trace celery.app.trace 67 140031597243208 Task main.batch.sendspam[2a6e5dc8-5fd2-40bd-8f65-7e7334a14b3f] succeeded in 0.19588526099687442s: None\n","stream":"stderr","time":"2018-10-10T04:00:00.438311386Z"}
...
Received task timestamps๋ฅผ ํ์ธํ๋ฉด ๋งค์๊ฐ ๋์ผํ ID๋ก ์ ์์ ์ ๊ฐ์ ธ์ต๋๋ค. ๊ฒฐ๊ณผ๋ ๋ชจ๋ ETA ๋ฉ์์ง๊ฐ 10๋ฒ ์ด์ ์ ์ก๋๋ค๋ ๊ฒ์ ๋๋ค. ETA๋ฅผ ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ์๋ง rabbitmq๊ฐ ์ต์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ต๊ทผ์ ๋น์ทํ ๋ฒ๊ทธ๋ฅผ ๋ง๋ฌ์ต๋๋ค. ๋ํ ps aux | grep celery
๋ ์์
์๊ฐ ์์ํ ๊ฒ๋ณด๋ค ๋ ๋ฐฐ ๋ ๋ง์ ํ๋ก์ธ์ค๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค. ์
๋ฌ๋ฆฌ ์์
์ ์คํ ๋ช
๋ น์ ๋งค๊ฐ๋ณ์ --pool gevent
๋ฅผ ์ถ๊ฐํ๋ฉด ํ๋ก์ธ์ค ์๋ฅผ ์์ ์์
์ ๋ฐ ์
๋ฌ๋ฆฌ ๋นํธ์ ์ ํํ ์๋ก ์ค์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ์ ๋ด ์์
์ ์คํํ๊ณ ์์ต๋๋ค.
๋ค๋ฅธ ์๋ฃจ์
์ด ack ์๋ฎฌ๋ ์ด์
์ ์์ ํ ๋นํ์ฑํํ ์ ์์ต๋๊น? ์ฆ "broker_transport_options": {"ack_emulation": False}
. ๋จ๊ธฐ ์์
/์นด์ดํธ๋ค์ด์ ๋ํ ๋จ์ ์ด ์์ต๋๊น?
๋๊ตฌ๋ ์ง ์์ ์ ์ป์์ต๋๊น?
๋์ผํ ๋ฌธ์ ์ ์ง๋ฉดํด ์์ต๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ถฉ๋, ๋์ผํ ๋ฌธ์ .
Redis๋ฅผ ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ๋ ๋์ผํ ๋ฌธ์ ์ ๋๋ค.
$ pipenv graph --bare | grep -i "redis\|celery"
---
channels-redis==2.4.0
- aioredis [required: ~=1.0, installed: 1.3.0]
- hiredis [required: Any, installed: 1.0.0]
django-celery-beat==1.5.0
django-celery-results==1.1.2
- celery [required: >=4.3,<5.0, installed: 4.3.0]
- celery [required: >=3.1.0, installed: 4.3.0]
- pylint-celery [required: ==0.3, installed: 0.3]
redis==3.2.1
๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์
๋ฌ๋ฆฌ ๋ฒ์ 4.3.0
์
๋ฌ๋ฆฌ = ์
๋ฌ๋ฆฌ('์์
', ๋ธ๋ก์ปค='pyamqp://nosd:sdsd@rabbit//', config_from_object={"broker_transport_options":{'visibility_timeout': 18000}})
์์
์๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ช
๋ น
celery -A ์์
์์
์ --pidfile=/tmp/celery_worker.pid -f=/tmp/celery_worker.log -Q celery_queue --loglevel=info --pool=solo --concurrency=1 -n worker_celery --detach -- ํ๋ด ์์ด -- ์์ด์ง ์๊ณ -- ์ฌ์ฅ ๋ฐ๋ ์์ด
celery==4.4.0rc4๋ฅผ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๊น?
Celery๋ ๋์์ ๋์ผํ ์์
ID๋ก ๋์ผํ ์์
์ ๋ ๋ฒ ์์ ํฉ๋๋ค.
๋ค์์ ๋ก๊ทธ์
๋๋ค.
[2019-11-29 08:07:35,464: INFO/MainProcess] Received task: app.jobs.booking.bookFlightTask[657985d5-c3a3-438d-a524-dbb129529443]
[2019-11-29 08:07:35,465: INFO/MainProcess] Received task: app.jobs.booking.bookFlightTask[657985d5-c3a3-438d-a524-dbb129529443]
[2019-11-29 08:07:35,471: WARNING/ForkPoolWorker-4] in booking funtion1
[2019-11-29 08:07:35,473: WARNING/ForkPoolWorker-3] in booking funtion1
[2019-11-29 08:07:35,537: WARNING/ForkPoolWorker-3] book_request_pp
[2019-11-29 08:07:35,543: WARNING/ForkPoolWorker-4] book_request_pp
๋ ๋ค ๋์์ ์คํ ์ค์ด๋ฉฐ,
ํ์ด์ฌ ํ๋ผ์คํฌ์์ SQS์ ํจ๊ป celery==4.4.0rc4 , boto3==1.9.232, kombu==4.6.6 ์ฌ์ฉ.
SQS์์ ๊ธฐ๋ณธ ๊ฐ์์ฑ ์ ํ ์๊ฐ์ 30๋ถ์ด๋ฉฐ ๋ด ์์
์๋ ETA๊ฐ ์๊ณ ack์ด ์์ต๋๋ค.
๋ฌ๋ฆฌ๋ ์์
์,
์
๋ฌ๋ฆฌ ์์
์ -A app.jobs.run -l ์ ๋ณด --pidfile=/var/run/celery/celery.pid --logfile=/var/log/celery/celery.log --time-limit=7200 --concurrency =8
@auvipy , ์ด๋ค ๋์์ด ๋ ๊ฒ์ ๋๋ค.
์ด๋ค ๋ธ๋ก์ปค์ ๊ฒฐ๊ณผ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๋ค๋ฅธ ๋ฐฑ์๋๋ก ์ ํํด ๋ณผ ์ ์์ต๋๊น?
์ด๋ค ๋ธ๋ก์ปค์ ๊ฒฐ๊ณผ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๋ค๋ฅธ ๋ฐฑ์๋๋ก ์ ํํด ๋ณผ ์ ์์ต๋๊น?
SQS๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฐ๊ณผ ๋ฐฑ์๋๋ sqlalchemy๊ฐ ์๋ MYSQL์
๋๋ค.
์์ธํ ๋ด์ฉ์ ์ฌ๊ธฐ SO, https://stackoverflow.com/questions/59123536/celery-is-receiving-same-task-twice-with-same-task-id-at-same-time
@auvipy ์ข ๋ด์ฃผ์ธ์.
@thedrow ๋น์ ์ ๋ธ๋ฃธ๋ฒ๊ทธ์์ ์ด ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๊น?
@nitish-itilite : ์ ๋ฌ๋ฆฌ์ ์๊ฐ๋๋ ๋ฌด์์ ๋๊น?
@nitish-itilite : ์ ๋ฌ๋ฆฌ์ ์๊ฐ๋๋ ๋ฌด์์ ๋๊น?
๊ธฐ๋ณธ UTC์ ๋๋ค. sqs ์์ ์ง์ญ์ ์ด ๋ฏธ๊ตญ ๋๋ถ(๋ฒ์ง๋์ ๋ถ๋ถ)์ ๋๋ค.
SQS์ ํจ๊ป ์
๋ฌ๋ฆฌ๋ฅผ ์คํํ๋ ๋น์ทํ ๊ฒฝ์ฐ๊ฐ ์์์ต๋๋ค. countdown=60
์ผ๋ก ๋๋ฏธ ์์
์ ์คํํ์ง๋ง SQS์ ๊ฐ์์ฑ ์ ํ ์๊ฐ์ 30์ด์
๋๋ค. ๋ด๊ฐ ์ป๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฐธ๊ณ : ์ ๋ --concurrency=1
๋ก ์
๋ฌ๋ฆฌ๋ฅผ ์์ํ์ผ๋ฏ๋ก ๋ ๊ฐ์ ์ค๋ ๋๊ฐ ์์ต๋๋ค. ๋ง๋์?
[2020-02-18 14:46:32 +0000] [INFO] Received task: notification[b483a22f-31cc-4335-9709-86041baa8f05] ETA:[2020-02-18 14:47:31.898563+00:00]
[2020-02-18 14:47:02 +0000] [INFO] Received task: notification[b483a22f-31cc-4335-9709-86041baa8f05] ETA:[2020-02-18 14:47:31.898563+00:00]
[2020-02-18 14:47:32 +0000] [INFO] Task notification[b483a22f-31cc-4335-9709-86041baa8f05] succeeded in 0.012232275999849662s: None
[2020-02-18 14:47:32 +0000] [INFO] Task notification[b483a22f-31cc-4335-9709-86041baa8f05] succeeded in 0.012890915997559205s: None
์๊ฐ์์ผ๋ก ์ผ์ด๋ ์ผ:
inflight
๋ชจ๋๋ก ์ค์ ํ์ต๋๋ค.๋ด ์๊ฐ์ ์ด๊ฒ์ Celery(?)์ ๋ฒ๊ทธ์
๋๋ค. ๋ฉ์์ง ID( b483a22f-31cc-4335-9709-86041baa8f05
)๊ฐ ํด๋น ์์
์์ ์ํด ์ด๋ฏธ ์ฌ์ฉ๋์๋์ง ํ์ธํ์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ชจ๋ ๋ฉ์์ง ID๊ฐ ํฌํจ๋ ํด์ ๋ชฉ๋ก์ด ์์ ์ ์์ผ๋ฏ๋ก ์ ๋ฌ๋ฆฌ๋ ์์ ๋ ์์ ์ด ์ฒ๋ฆฌ์ ์ ํจํ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค. ์ ๋ฌ๋ฆฌ๊ฐ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๊น?
๋
ธํธ 2:
์์
์๊ฐ ์ค์ ๋ก ์ฌ๋งํ๋ฉด ๋ค๋ฅธ ์์
์๊ฐ ๋ฉ์์ง๋ฅผ ์์ ํ๋ ๋ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ฐ์์ฑ ์ ํ ์๊ฐ์ ๋๋ฌด ๊ธธ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค. ๋๋ฌด ๋ฎ๊ฒ ์ค์ ํ๋ฉด ์ด ์กฐ๊ฑด์ด ๋
ธ์ถ๋ฉ๋๋ค.
์ด๊ฒ์ ๋์๊ฒ๋ ์ผ์ด๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
[2020-05-11 15:31:23,673: INFO/MainProcess] ๋ฐ์ ์์
: ee_external_attributes.tasks. recreate_specific_values[53046bd7-2a19-4f72-808f-d712eaecb0e8]
[2020-05-11 15:31:28,673: INFO/MainProcess] ๋ฐ์ ์์
: ee_external_attributes.tasks.recreate_specific_values[53046bd7-2a19-4f72-808f-d712eaecb0e8]
(๊ณต๊ฐ ๊ฒ์๋ฅผ ์ํด ๋ก๊ทธ์์ ์์ ์ด๋ฆ์ ์์ ํ์ต๋๋ค.)
๊ณ ์ ์ฑ ์ ์ฝ์ผ๋ก ์ธํด ์์ ์ ์ค ํ ๋ช ์ด ์์ ๋์ค์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ณ ๋ค๋ฅธ ์์ ์๋ ์ฑ๊ณตํฉ๋๋ค.
์ค์ ์ ์๋ํ์ต๋๋ค
CELERY_WORKER_PREFETCH_MULTIPLIER = 1
๋์์ด ๋์ง ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
๋๋ ์ฌ์ฉํ๊ณ ์๋ค
์
๋ฌ๋ฆฌ==4.4.1
์ฅ๊ณ -์
๋ฌ๋ฆฌ-๊ฒฐ๊ณผ==1.2.1
๊ทธ๋ฆฌ๊ณ ๋๊ธฐ์ด์ AWS SQS๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๋์๊ฒ๋ ์ด๋ก ์ด ์๋ค. ๋ถ๋ช ํ ๋ด ๋๊ธฐ์ด์ "๊ธฐ๋ณธ ํ์ ์๊ฐ ์ด๊ณผ" ์ค์ ์ 5์ด๋ก ์ค์ ๋์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์ ์๊ฐ ์์ ํ๋ ๋์ ๋ ๋ฒ์งธ ์์ ์๊ฐ ์์ ์ ๋นผ๋์ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์ ์๊ฐ ์ฌ๋งํ๋ค๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค. ๊ฐ์์ฑ ์ ํ ์๊ฐ์ 2๋ถ์ผ๋ก ์ฌ๋ ธ๋๋ ๋ ์ ๋๋ ๊ฒ ๊ฐ์ต๋๋ค. 8-12์ด๊ฐ ๊ฑธ๋ฆฌ๋ ์์ ์ด ๋ง์๊ธฐ ๋๋ฌธ์ 2๋ถ์ด ๊ณผ๋ํ ์ ์์ต๋๋ค. ํ์ง๋ง ํด๊ฒฐ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ฒซ ๋ฒ์งธ ์์ ์๊ฐ ์์ ํ๋ ๋์ ๋ ๋ฒ์งธ ์์ ์๊ฐ ์์ ์ ๋นผ๋์ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์ ์๊ฐ ์ฌ๋งํ๋ค๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
@JulieGoldberg , Celery๊ฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํํธ์๋ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์ ๋๋ค. Celery ์์ ์๋ ๋ค๋ฅธ ์์ ์๊ฐ ๋๊ธฐ์ด์์ ์ ๊ฑฐํ๊ณ ์ ๊ทน์ ์ผ๋ก ์ฒ๋ฆฌ ์ค์ธ ์์ ์ ์์ํด์๋ ์ ๋ฉ๋๋ค. ์ฌ๊ฐํ๊ฒ ๊นจ์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. (๊ทผ๋ฐ ์๋ฌ๋ฆฌ์ผ ์ด์ ์๋ฌด๊ฒ๋ ์๋ค์ด๊ฐ์ ๋๋๐)
Kubernetes์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. Kubernetes ์ธ์คํด์ค์๋ Redis์ ์์ ์ ์ฌ์ฉํ๋ 10๋ช ์ ์์ ์(์ ๋ฌ๋ฆฌ ์ฑ ์ธ์คํด์ค)๊ฐ ์์ต๋๋ค.
์ฆ์:
์
๋ฌ๋ฆฌ ์์
์๋ 30๋ถ ํ์ ๊ณํ๋ ETA ์์
์ ์์ฝํฉ๋๋ค. Kubernetes ํฌ๋๊ฐ ํ์ ๋๊ฑฐ๋(Kubernetes์ ์ํด ์์
์๊ฐ ์ข
๋ฃ๋จ) ์ ํ๋ฆฌ์ผ์ด์
์ ์ต์ ๋ฒ์ ์ด ๋ฐฐํฌ๋๋ฉด(๋ชจ๋ ์์
์๊ฐ ์ข
๋ฃ๋๊ณ ์ ์์
์๊ฐ ์์ฑ๋จ) ๋ชจ๋ ์์
์๊ฐ ์์ฝ๋ ์์
์ ์ํํ๊ณ ์ ์๋ ์๊ฐ์ ์คํ์ ์์ํฉ๋๋ค.
์์
์์ ๊ฒฝ์ฐ ๋ช ์๊ฐ์์ ์ต๋ 1๋
๊น์ง visibility_timeout
๊ฐ์ ๋ค๋ฅด๊ฒ ์ค์ ํด ๋ณด์์ง๋ง ๊ฒฐ๊ณผ๋ ์ฌ์ ํ ๋์ผํ์ต๋๋ค. enable_utc = True
์ค์ ๋๋ worker_prefetch_multiplier = 1
๊ฐ์๋ก ๋์ผํ ๋์์ ๋๋ฌํ์ต๋๋ค.
์ด๊ฒ์ด ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ด๊ฒ์ด ๋ด ๋ฌธ์ ์์ต๋๋ค.
ํ์ด์ง๊ฐ GET์ ํตํด ๋ก๋๋ ๋ ์คํ๋๋ ์์
(๋ณด๊ณ ์ ์์ฑ)์ด ์์์ต๋๋ค. ์ด๋ค ์ด์ ๋ก(ํ๋น์ฝ๊ณผ ๊ด๋ จ์ด ์์) Chrome์ ๋ชจ๋ ํ์ด์ง ๋ก๋์ ๋ํด 2๊ฐ์ GET ์์ฒญ์ ๋ณด๋ด ์์
์ ๋ ๋ฒ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
GET ์์ฒญ์ ๋ถ์์ฉ์ด ์์ด์ผ ํ๋ฏ๋ก ๊ทํ๊ฐ ์ ์ถํ ์์์ผ๋ก ๋ชจ๋ ๋ณํํ์ฌ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์์ ์๊ฐ ์์ ํ๋ ๋์ ๋ ๋ฒ์งธ ์์ ์๊ฐ ์์ ์ ๋นผ๋์ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์ ์๊ฐ ์ฌ๋งํ๋ค๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
@JulieGoldberg , Celery๊ฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํํธ์๋ ๋ฐฉ๋ฒ์ด ๋ ๊ฒ์ ๋๋ค. Celery ์์ ์๋ ๋ค๋ฅธ ์์ ์๊ฐ ๋๊ธฐ์ด์์ ์ ๊ฑฐํ๊ณ ์ ๊ทน์ ์ผ๋ก ์ฒ๋ฆฌ ์ค์ธ ์์ ์ ์์ํด์๋ ์ ๋ฉ๋๋ค. ์ฌ๊ฐํ๊ฒ ๊นจ์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. (๊ทผ๋ฐ ์๋ฌ๋ฆฌ์ผ ์ด์ ์๋ฌด๊ฒ๋ ์๋ค์ด๊ฐ์ ๋๋๐)
๋ถ๋ง์ ์ ๊ธฐํ๋ ๋์ ์๋ฃจ์ ๊ณผ PR์ ์ ์ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
Kubernetes์์ ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. Kubernetes ์ธ์คํด์ค์๋ Redis์ ์์ ์ ์ฌ์ฉํ๋ 10๋ช ์ ์์ ์(์ ๋ฌ๋ฆฌ ์ฑ ์ธ์คํด์ค)๊ฐ ์์ต๋๋ค.
์ฆ์:
์ ๋ฌ๋ฆฌ ์์ ์๋ 30๋ถ ํ์ ๊ณํ๋ ETA ์์ ์ ์์ฝํฉ๋๋ค. Kubernetes ํฌ๋๊ฐ ํ์ ๋๊ฑฐ๋(Kubernetes์ ์ํด ์์ ์๊ฐ ์ข ๋ฃ๋จ) ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ๋ฒ์ ์ด ๋ฐฐํฌ๋๋ฉด(๋ชจ๋ ์์ ์๊ฐ ์ข ๋ฃ๋๊ณ ์ ์์ ์๊ฐ ์์ฑ๋จ) ๋ชจ๋ ์์ ์๊ฐ ์์ฝ๋ ์์ ์ ์ํํ๊ณ ์ ์๋ ์๊ฐ์ ์คํ์ ์์ํฉ๋๋ค.
@elMateso k8(ํฌ๋์ ์๋น์ ๋ฐ ๋๊ธฐ์ด๋ก redis)์ Airflow ๋ฐฐํฌ์ ์ ์ฌํ ๋ฌธ์ ์ ์ง๋ฉดํ์ต๋๋ค. ํ์ง๋ง ๋ฐฐํฌ๋ฅผ ์์ ์ ์ผ๋ก ๋ง๋ค๊ณ ์์๋๋ก ์๋ํ ์ ์์์ต๋๋ค. ๋ค์ ํ์ด ๋์์ด ๋ ๊ฒ์
๋๋ค.
https://www.polidea.com/blog/application-scalability-kubernetes/#tips -for-hpa
์ฌ๊ธฐ์์ ๊ฐ์ ์ผ๊ตด์ ํ๊ณ ์์ต๋๋ค.
์ ์ด๋ ์ ์๊ฒ๋ ์ด๋ค ํ์ด๋ฐ ๊ตฌ์ฑ(๊ฐ์์ฑ ์๊ฐ ์ด๊ณผ, ETA ๋ฑ)์๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด ๊ฒฝ์ฐ์๋ ์คํ ์ฌ์ด์ ๋ง์ดํฌ๋ก์ด๊ฐ ๋ฐ์ํฉ๋๋ค. ์ ๋ฌ๋ฆฌ๊ฐ ์ค์ ๋ก ๋ฉ์์ง ACK๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์ง๋ง RabbitMQ์์ ์๋ฒฝํ๊ฒ ์๋ํ๋ ๊ฒฝ์ฐ Redis์ ๋์์ฑ ๋ฐ ACK์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ Redis๋ ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. RabbitMQ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ ํ ์ฌํญ์ด ์๋๋๋ค.
์์ ์ด ํ ๋ฒ๋ง ์คํ๋๋๋ก ์ ๊ธ์ ์ฌ์ฉํด ๋ณธ ์ฌ๋์ด ์์ต๋๊น? ๊ทธ๊ฒ ํจ๊ณผ๊ฐ ์์๊น์?
์: https://docs.celeryproject.org/en/latest/tutorials/task-cookbook.html#ensuring -a-task-is-only-executed-one-at-a-time
@ErikKalkoken ์ฐ๋ฆฌ๋ ์ ํํ ๊ทธ๋ ๊ฒ ํ๊ณ ์์ต๋๋ค.
def semaphore(fn):
@wraps(fn)
def wrapper(self_origin, *args, **kwargs):
cache_name = f"{UID}-{args[0].request.id}-semaphore"
agreement_redis = AgreementsRedis()
if not agreement_redis.redis.set(cache_name, "", ex=30, nx=True):
Raise Exception("...")
try:
return fn(self_origin, *args, **kwargs)
finally:
agreement_redis.redis.delete(cache_name)
return wrapper
์์ ์ฝ๋๋ ์ ๋ฌ๋ฆฌ์๋ ์ฌ์ฉ๋์ง ์์ง๋ง ์ ๋ฌ๋ฆฌ ๋ค์ค ์คํ์ ๋์ผํ ๋ ผ๋ฆฌ์ด๋ฏ๋ก task_id๋ฅผ ๊ฐ์ ธ์ค๊ณ ์บ์๋ฅผ ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ง๊ธ๊น์ง๋ ์ ์๋ํ๊ณ ์์ต๋๋ค.
๋๊ตฐ๊ฐ์ด ํ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๊น? https://github.com/vinayinvicible/kombu/commit/a755ba14def558f2983b3ff3358086ba55521dcc
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@georgepsarakis ์์ ์ด ํจ์ฌ ๋ ๋จผ ๋ฏธ๋์ ์์ ๋์ด ์๋ค๋ฉด ์์ ๋ด์ฉ์ ๋ณผ ์ ์์๊น์? "๊ฐ์์ฑ ์๊ฐ ์ด๊ณผ"๊ฐ ์ด๋ฅผ ํด๊ฒฐํฉ๋๊น? ๋งํฌ ํ ๋ฌธ์์์ :
ํ ์๊ฐ ๋ด์ ์์ ์๊ฐ ์์ ์ ์น์ธํ์ง ์์ผ๋ฉด(์ฆ, ์คํํฉ๋๊น?) ํด๋น ์์ ์ ์น์ธํ์ง ์์ ๋ค๋ฅธ ์์ ์์๊ฒ ์ ์ก๋๋ ์์ ๋๋ค... ์ค์ ๋ก ์ด๊ฒ์ ๋ค์์ ๊ฒฝ๊ณ ์น์ ์ ๋ณด๋ ๊ฒฝ์ฐ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์; ์ด ๊ด๋ จ ๋ฌธ์ https://github.com/celery/kombu/issues/337; ๋๋ ์ด ๋ธ๋ก๊ทธ ์์ ์ธ์ฉ:
visibility_timeout
๋ฅผ 31,540,000์ด(1๋ )๋ก ์ค์ ํ๋ ๊ฒ์ด ๋น ๋ฅธ ์์ ์ผ ์ ์์ต๋๋ค.