Celery: CELERY_TIMEZONE ๋ฐ CELERY_ENABLE_UTC๋Š” ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 06์›” 10์ผ  ยท  28์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: celery/celery

์šด์ด์—†๋Š” ํ˜„์ง€ ์‹œ๊ฐ„๋Œ€์™€ ๋‹ค๋ฅธ ์‹œ๊ฐ„๋Œ€๋กœ ์ฝ˜์†”์—์„œ ์…€๋Ÿฌ๋ฆฌ ์ž‘์—…์ž๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฌด์—‡์„ํ•˜๋“  ์ž‘์—…์ž์˜ ๋กœ๊ทธ๋Š” ํ•ญ์ƒ ํ˜„์ง€ ์‹œ๊ฐ„๋Œ€ (UTC๊ฐ€ ์•„๋‹˜)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ž๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ UTC ์‹œ๊ฐ„๋Œ€๋กœ ์‹œ์ž‘ํ•˜๋ฉด ์•ˆ ๋˜๋‚˜์š”? (CELERY_ENABLE_UTC๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •).

๊ฐ€๋Šฅํ•œ ์›์ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ช‡ ๋‹ฌ ์ „์— ์ž‘๋™ํ–ˆ๋˜ ๊ฒƒ์ด ๋ง‰์—ฐํ•˜๊ฒŒ ๊ธฐ์–ต๋‚ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ผ๊ด‘ ์ ˆ์•ฝ ์‹œ๊ฐ„ ์ œ๊ฐ€ ํ™œ์„ฑํ™” ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ผ๊นŒ์š”?

๋‚ด ์ง„์งœ ๋ฌธ์ œ๋Š” ํ˜„์ง€ ์‹œ๊ฐ„๋Œ€ (UTC๊ฐ€ ์•„๋‹˜)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Django ์•ฑ๊ณผ Django ์•ฑ ๋‚ด๋ถ€์— ๋ช‡ ๊ฐ€์ง€ ์…€๋Ÿฌ๋ฆฌ ์ž‘์—…์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. UTC ์‹œ๊ฐ„๋Œ€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์…€๋Ÿฌ๋ฆฌ ์ž‘์—…์ž๋กœ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Bug Report Major Trivial Feedback Needed โœ˜

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@expresspotato ์ž‘์—…์— ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌด๋ฃŒ๋กœ ํฌํฌ ์…€๋Ÿฌ๋ฆฌ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค.
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋น„์šฉ์„ ์ง€๋ถˆ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž์ฒด ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ํ™˜์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‹น์‹ ์„ ๊ธˆ์ง€ํ•˜๊ธฐ ์ „์— ๋งˆ์ง€๋ง‰ ๊ฒฝ๊ณ ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋“  28 ๋Œ“๊ธ€

CELERY_TIMEZONE ๋ฐ CELERY_ENABLE_UTC ์ง€์‹œ๋ฌธ์€ ์ž‘์—…์ž๊ฐ€ ์•„๋‹Œ ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ์— ๋Œ€ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์…€๋Ÿฌ๋ฆฌ์˜ ๋กœ๊ทธ์ธ์€ CELERY_ENABLE_UTC๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ด์ฌ ๋กœ๊น… ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋‹จ์ˆœํ•œ ๋ž˜ํผ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

CELERY_ENABLE_UTC๋Š” ์‚ฌ๋žŒ๋“ค์ด ์•„์ฃผ ์˜ค๋ž˜๋œ Django ๋ฒ„์ „ (1.4 ์ดํ•˜)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@thedrow ๋Š” Django 1.4 LTS ์ง€์›์ด ์ข…๋ฃŒ๋˜๋Š” 10 ์›”์— ๊ธฐ๋ณธ์ ์œผ๋กœ UTC๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (https://www.djangoproject.com/download/).

์˜ˆ, ์šฐ๋ฆฌ๋Š” ์•„๋งˆ 3.2.0์„ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋ฌธ์„œ๋ฅผ ํ™•์ธ ํ–ˆ์œผ๋ฏ€๋กœ CELERY_ENABLE_UTC๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ์ด ๋ฒ„๊ทธ๋Š” ๋กœ๊น…์—๋งŒ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์™„๋ฃŒ ํ•  ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—์ด ์ž‘์—…์„ ๋งˆ๋ฌด๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ์—์„œ ์ˆ˜์ • ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 4.0 ๋ฆด๋ฆฌ์Šค ์ดํ›„์— ๋Œ์•„ ์˜ค๋Š”์ง€ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ํ† ๋ก ์—์„œ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌ ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์„์œ„ํ•œ ์œ ์šฉํ•œ ๋ฉ”๋ชจ๋กœ, Django ํ”„๋กœ์ ํŠธ (EST)์™€ ๋‹ค๋ฅธ ์‹œ๊ฐ„๋Œ€ (UTC)์—์„œ ์…€๋Ÿฌ๋ฆฌ ์›Œ์ปค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. celery์—๊ฒŒ ๋‹ค๋ฅธ Django ์„ค์ • ํŒŒ์ผ (์˜ˆ : celery_settings)์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์›๋ž˜ ์„ค์ • (settings import *์—์„œ)์„ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ TIME_ZONE ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ Celery 4.0.2์— ๋‚จ์•„์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ‘œ์ค€ ์ถœ๋ ฅ ๋กœ๊ทธ์˜ ํƒ€์ž„ ์Šคํƒฌํ”„๋Š” Django์˜ TIME_ZONE ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ์˜ํ–ฅ์„๋ฐ›์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ # 4006์€ ๊ทธ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. @marvelph ์ด๊ฒƒ์€ ํ˜„์žฌ ๋งˆ์Šคํ„ฐ์—์„œ ์ˆ˜์ • ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„ํŠธ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CELERY_TIMEZONE = 'Europe / Lisbon'๋ฐ django TIMEZONE = 'Europe / Lisbon'์— ๋ฌธ์ œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ is_due์˜ ๋‚ ์งœ๋ฅผ ์ž˜๋ชป ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
pip ๋ฒ„์ „์—์„œ ๋‚˜๋Š” ๊ณ„์‚ฐ์ด ์Œ์ˆ˜ ์˜€๊ณ  ๊ทธ๊ฒƒ์€ ์ฆ‰์‹œ ์ž‘์—…์„ ์ฆ‰์‹œ ์ ์‹ฌ์œผ๋กœ ๋งŒ๋“ค์—ˆ๊ณ , ํ˜„์žฌ ๋งˆ์Šคํ„ฐ์—์„œ๋Š” 1h + ๋ฐ˜๋ณต ์‹œ๊ฐ„์œผ๋กœ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‘ ์„ค์ •์„ ๋ชจ๋‘ 'UTC'๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

# 4173์„ master ๋ณ‘ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. master ์ง€์ ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ๋‚จ์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์Šคํ„ฐ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ตœ์‹  ๋Œ“๊ธ€์„ ํ™•์ธํ•˜์„ธ์š”. https://github.com/celery/celery/issues/4041
์ตœ์‹  ๋งˆ์Šคํ„ฐ์˜ ์…€๋Ÿฌ๋ฆฌ ์‹œ๊ฐ„๋Œ€์— ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค .CELERY_TIMEZONE๊ณผ TIMEZONE์ด ๋ชจ๋‘ 'Europe / Lisbon'์ด๋ฉด django ์…€๋Ÿฌ๋ฆฌ ๋น„ํŠธ๊ฐ€ ๋‹ค์Œ ์ž‘์—…์„ ์˜ฌ๋ฐ”๋ฅธ ์‹œ๊ฐ„๋ณด๋‹ค 1 ์‹œ๊ฐ„ ๋” ๋งŽ์ด ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ TIME_ZONE๊ณผ CELERY_TIMEZONE์„ ๋ชจ๋‘ Europe / Moscow๋กœ ์„ค์ •ํ–ˆ์ง€๋งŒ Celery beat๋Š” ์—ฌ์ „ํžˆ UTC๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. CELERY_ENABLE_UTC ์„ค์ •์„ ์ „ํ™˜ ํ•ด ๋ณด์•˜์ง€๋งŒ ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด ์‹œ์Šคํ…œ ์‹œ๊ฐ„์€ ์œ ๋Ÿฝ / ๋ชจ์Šคํฌ๋ฐ”์ด๊ณ  ์ด๊ฒƒ์€ ์ •๋ง ์‹ค๋ง ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์…€๋Ÿฌ๋ฆฌ 4.1 ๋ฐ django 1.11.x์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ (CELERY_TIMEZONE = TIME_ZONE = Europe / Rome)

  • ๋‚ด periodic_tasks๊ฐ€ ์˜ˆ์ƒ ์‹œ๊ฐ„์— ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์น˜์ง€ ์•Š์•˜๋‹ค : /)
  • ์…€๋Ÿฌ๋ฆฌ ์ž‘์—…์„ ์žฌ ์‹œ๋„ ํ•  ๋•Œ ๊ณ„์‚ฐ ๋œ ETA๊ฐ€ ์ž˜๋ชป๋˜์–ด (์ง€๊ธˆ๋ณด๋‹ค ์ ์Œ) ์žฌ ์‹œ๋„๊ฐ€ ์ฆ‰์‹œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์žฌ ์‹œ๋„ํ•œ ์ž‘์—…์— ์ „๋‹ฌํ•˜๋Š” eta๋ฅผ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค (https://github.com/celery/celery/issues/4221#issuecomment-324204504).

์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์„ ์ฐพ์œผ๋ฉด ์—ฌ๊ธฐ์— ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@ madEng84 Django 1.11 ๋ฐ Celery 4.1๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ž‘์—… ์žฌ ์‹œ๋„๋Š” ์นด์šดํŠธ ๋‹ค์šด์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  eta์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋†๋‹ด ๋ณด๋‚ด๊ณ  * ์ ˆ๋Œ€ F์ด๋‹ค. ๋ชจ๋“  ์…€๋Ÿฌ๋ฆฌ๋Š” ์ž‘์—…-> ์ •์‹œ์— ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋„๋Œ€์ฒด ์™œ์ด ๊ฐœ๋ฐœ์ž๋“ค์€ ๊ทธ๊ฒƒ์ด ์„ค๊ณ„๋œ ๊ฒƒ์„ ํ•  ์ˆ˜ ์—†์„ ๋•Œ ์•„๋ฌด๋„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ์ด๊ตญ์ ์ธ ๊ธฐ๋Šฅ xyz๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ์ด๋Ÿฐ ์„ธ์ƒ์—!

CELERY_TIMEZONE = '๋ฏธ๊ตญ / ๋™๋ถ€'

4.1์—์„œ๋Š” ์ž‘์—…์ด ์™„์ „ํžˆ ์ž˜๋ชป๋œ ์‹œ๊ฐ„์— ์‹คํ–‰๋˜๊ณ  3์—์„œ๋Š” ๊ดœ์ฐฎ ์•˜์Šต๋‹ˆ๋‹ค.

@expresspotato ์ž‘์—…์— ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌด๋ฃŒ๋กœ ํฌํฌ ์…€๋Ÿฌ๋ฆฌ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค.
๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋น„์šฉ์„ ์ง€๋ถˆ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž์ฒด ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ํ™˜์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‹น์‹ ์„ ๊ธˆ์ง€ํ•˜๊ธฐ ์ „์— ๋งˆ์ง€๋ง‰ ๊ฒฝ๊ณ ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๋‚ด๊ฐ€ ์•„๋Š” ํ•œ์ด ๋ฌธ์ œ๋Š” ๋ช‡ ๋‹ฌ ์ „์— ๋งˆ์Šคํ„ฐ ์—์„œ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ฆด๋ฆฌ์Šค ๋Œ€์‹  be55de622381816d087993f1c7f9afcf7f44ab33์— ๊ณ ์ • ๋œ master ๋ถ„๊ธฐ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ  ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜๋„ ์™œ ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์•˜์„๊นŒ์š”? ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@Jamim ๋ฆด๋ฆฌ์Šคํ•˜๊ธฐ ์ „์— ๋ณ‘ํ•ฉ ํ•  ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ๋ช‡ ๊ฐœ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ •ํ‘œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์‹œ๊ฐ„๋Œ€๋ฅผ '์•„์‹œ์•„ / ์ƒํ•˜์ด'๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ๋Ÿฐํƒ€์ž„์€ ์ •ํ™•ํ•œ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜์ง€๋งŒ ์žฌ ์‹œ๋„๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์‹œ๊ฐ„ ๋’ค์— '+'๋ฅผ ๊ณ„์‚ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. '' 'ETA : [2018-04-19 11 : 14 : 53.216361 + 08 : 06]' '' '. ๊ณ„์‚ฐ ์‹œํŠธ ๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์— ์ดˆ ์ˆ˜๋ฅผ ๋”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ๊ทธ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ์™„๋ฒฝํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด ์ง„์ˆ ์ด ์œ ์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฟก๋ฟก
์ด๊ฒƒ์ด ๋‹ซํžˆ์ง€ ์•Š์•„์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ช…๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” celery==4.1.0 ๋ฐ Django==1.11.6 ์žˆ์Šต๋‹ˆ๋‹ค.

CELERY_TIMEZONE ๋ฐ TIMEZONE ๋Œ€ํ•ด ์„ค์ • ํ•œ ๋‚ด์šฉ์— ๊ด€๊ณ„์—†์ด Celery beat๋Š” UTC๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋“ค์˜ ์กฐํ•ฉ True ๋ฐ False ๋Œ€ํ•œ CELERY_ENABLE_UTC ๋ฐ USE_TZ ์ฐจ์ด๊ฐ€ ์—†๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ž‘๋™ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค์ด ๋ฒ„๊ทธ๋ฅผ ์ธ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

4.2rc2๋ฅผ ์‹œ๋„ํ•˜๊ณ ๋ณด๊ณ ํ•˜์‹ญ์‹œ์˜ค

Celery์˜ ์‹œ๊ฐ„ ์„ค์ •์ด ์–ด๋–ป๊ฒŒ๋˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
base.py-> ์ง€๊ธˆ
์ด์ œ ์„ ํƒํ•œ ์‹œ๊ฐ„๋Œ€ 'Europe / London'์— ๋Œ€ํ•œ ์‹ค์ œ ์‹œ๊ฐ„์„๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

[2018-06-22 13:24:37,338: ERROR/MainProcess] <=Celery App Base=> now -> now_in_utc                      2018-06-22 12:24:37.336361+00:00
[2018-06-22 13:24:37,338: INFO/MainProcess] <=Celery App Base=> now -> self.timezone                    Europe/London
[2018-06-22 13:24:37,338: ERROR/MainProcess] <=Celery App Base=> now -> now_in_utc.astimezone(self.timezone)                            2018-06-22 13:24:37.336361+01:00
[2018-06-22 13:24:37,338: ERROR/MainProcess] <=Celery Schedules=> now -> self.app.now() 2018-06-22 13:24:37.336361+01:00
[2018-06-22 13:24:37,338: ERROR/MainProcess] <=Utils Time=> remaining -> now 2018-06-22 13:24:37.338674+01:00
[2018-06-22 13:24:42,349: ERROR/MainProcess] <=Celery Schedules=> now -> self.nowfun() 2018-06-22 13:24:42.349524+01:00

๊ทธ๋Ÿฌ๋‚˜ ์ž‘์—…์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์›์‹œ UTC๋กœ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค-2018-06-22 12 : 24 : 42.350384

ํ…Œ์ŠคํŠธ ๋ณ€๊ฒฝ :

[2018-06-22 13:40:30,568: ERROR/MainProcess] <=Celery App Base=> timezone_func conf.timezone: Europe/Kiev
[2018-06-22 13:40:30,569: ERROR/MainProcess] <=Celery App Base=> timezone_func timezone.get_timezone(conf.timezone): Europe/Kiev
[2018-06-22 13:40:30,603: ERROR/MainProcess] <=Celery App Base=> now -> now_in_utc.astimezone(self.timezone) 1                          2018-06-22 15:40:30.600489+03:00
[2018-06-22 13:40:30,603: ERROR/MainProcess] <=Celery Schedules=> now -> self.app.now() 2018-06-22 15:40:30.600489+03:00
[2018-06-22 13:40:30,604: ERROR/MainProcess] <=Utils Time=> remaining -> now 2018-06-22 15:40:30.603985+03:00
[2018-06-22 13:40:30,604: ERROR/MainProcess] <=Celery Schedules=> now -> self.nowfun() 2018-06-22 15:40:30.604436+03:00

์ด์ œ ์„ค์ • ์‹œ๊ฐ„๋Œ€๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ž‘์—…์€ ์—ฌ์ „ํžˆ โ€‹โ€‹UTC ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

์ฒซ์งธ, ์ด๊ฒƒ์€ ์•„๋งˆ๋„ datetime.utcnow ()๊ฐ€ ์•„๋‹Œ datetime.now ์ธ์Šคํ„ด์Šค ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ์™œ ์šฐ๋ฆฌ๋Š” UTC๋ฅผ ์ด๋ฏธ UTC๋กœ ๊ฒฐ์ •ํ–ˆ์„๊นŒ์š”?

def to_utc(dt):
    """Convert naive :class:`~datetime.datetime` to UTC."""
    return make_aware(dt, timezone.utc)

์ด์ œ ์–ด๋””์—์„œ๋‚˜ ๋Ÿฐ๋˜ ์‹œ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<=Celery App Base=> timezone_func conf.timezone: Europe/London
<=Celery App Base=> timezone_func timezone.get_timezone(conf.timezone): Europe/London
<=Celery Schedules=> now -> self.nowfun() 2018-06-22 14:11:03.625825+01:00
<=Utils Time=> to_utc -> What is dt_utc: 2018-06-22 14:11:03.626616
<=Utils Time=> remaining -> now 2018-06-22 14:11:03.629900+01:00
<=Celery Schedules=> now -> self.nowfun() 2018-06-22 14:11:03.630299+01:00

<=Utils Time=> make_aware -> _localize(dt, is_dst=None) 2018-06-22 14:11:03.630514+00:00
<=Utils Time=> to_utc -> make_aware(dt_utc, timezone.utc): 2018-06-22 14:11:03.630514+00:00
<=Utils Time=> make_aware -> What is dt: 2018-06-22 14:11:03.630514

๊ทธ๋Ÿฌ๋‚˜ ์ด์ „์—๋Š” ์—ฌ์ „ํžˆ ์ž‘์—…์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

Received | 2018-06-22 13:05:02.712443 UTC
-- | --
Sent | 2018-06-22 13:05:02.707066 UTC
Started | 2018-06-22 13:05:02.716835 UTC
Succeeded | 2018-06-22 13:05:03.029372 UTC
Retries | 0
Timestamp | 2018-06-22 13:05:03.029372 UTC

@trianglesis ๊ฐ€๋Šฅํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์žˆ๋Š” PR์„ ์—ด์–ด์„œ ๋…ผ์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

crontab ์—์„œ nowfun ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์‹œ๊ฐ„๋Œ€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/21827290/celery-beat-different-time-zone-per-task

๋‚ด๊ฐ€ ์„ค์ •ํ–ˆ์„ ๋•Œ ํ•ญ์ƒ UTC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” date_done ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

cel_app.conf.timezone = 'Asia/Shanghai'
cel_app.conf.enable_utc = True

pip ๋ฐ redis์— ์˜ํ•ด ์„ค์น˜๋œ v4.3.0์—์„œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰