[2017-08-07 21ïŒ12ïŒ10,790ïŒDEBUG / MainProcess] DatabaseSchedulerïŒããŒã¿ããŒã¹ã¹ã±ãžã¥ãŒã«ã®ååŸ
[2017-08-07 21ïŒ12ïŒ10,797ïŒDEBUG / MainProcess]çŸåšã®ã¹ã±ãžã¥ãŒã«ïŒ
[2017-08-07 21ïŒ12ïŒ10,809ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ15,813ïŒDEBUG / MainProcess]ããŒãïŒã¹ã±ãžã¥ãŒã«ãåæããŠããŸã...
[2017-08-07 21ïŒ12ïŒ15,813ïŒINFO / MainProcess]ãšã³ããªãæžã蟌ãã§ããŸã...
[2017-08-07 21ïŒ12ïŒ15,816ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ20,818ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ25,825ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ30,831ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ35,839ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ40,844ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ45,851ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ50,854ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ12ïŒ55,860ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ13ïŒ00,862ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ13ïŒ05,870ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
^ C [2017-08-07 21ïŒ13ïŒ10,245ïŒINFO / MainProcess]ãšã³ããªãæžã蟌ãã§ããŸã...
[2017-08-07 21ïŒ13ïŒ10,246ïŒINFO / MainProcess]ãšã³ããªãæžã蟌ãã§ããŸã...
[2017-08-07 21ïŒ18ïŒ43,339ïŒDEBUG / MainProcess]çŸåšã®ã¹ã±ãžã¥ãŒã«ïŒ
[2017-08-07 21ïŒ18ïŒ43,364ïŒINFO / MainProcess]ã¹ã±ãžã¥ãŒã©ãŒïŒæéä»ãã¿ã¹ã¯ã¹ã±ãžã¥ãŒã«ã®éä¿¡ïŒGeneBank.tasks.testïŒ
[2017-08-07 21ïŒ18ïŒ43,376ïŒDEBUG / MainProcess]ããŒãïŒã¹ã±ãžã¥ãŒã«ãåæããŠããŸã...
[2017-08-07 21ïŒ18ïŒ43,376ïŒINFO / MainProcess]ãšã³ããªãæžã蟌ãã§ããŸã...
[2017-08-07 21ïŒ18ïŒ43,380ïŒDEBUG / MainProcess] GeneBank.tasks.testãéä¿¡ãããŸããã id-> 9c1bdf10-0a5f-440a-98db-9eb24433a8d4
[2017-08-07 21ïŒ18ïŒ43,381ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ18ïŒ48,386ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ18ïŒ53,392ïŒDEBUG / MainProcess]ããŒãïŒ5.00ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ18ïŒ58,397ïŒDEBUG / MainProcess]ããŒãïŒ1.59ç§ã§ãŠã§ã€ã¯ã¢ããããŸãã
[2017-08-07 21ïŒ19ïŒ00,001ïŒINFO / MainProcess]ã¹ã±ãžã¥ãŒã©ãŒïŒæéä»ãã¿ã¹ã¯ã¹ã±ãžã¥ãŒã«ã®éä¿¡ïŒGeneBank.tasks.testïŒ
ç§ã¯äž¡æ¹ã䜿çšããŠããŸãããåé¡ãªãåäœããŠããŸã
ããŒãžã§ã³4.0.2ããããŒãžã§ã³4.1.0ã«æŽæ°ããåŸãåæ§ã®ãšã©ãŒãçºçããã¿ã¹ã¯ã¹ã±ãžã¥ãŒã©ãæ£ããæ©èœããŸãã
ããã§ãåãã§ããã4.0.2ã«ããŠã³ã°ã¬ãŒããããšåã³æ©èœããŸãã
ãã®ãã°ã¯ã¿ã€ã ãŸãŒã³ã«é¢é£ããŠãããšæããŸããã¿ã€ã ãŸãŒã³ãUTCã«å€æŽãããšæ©èœããŸãã
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True
çŸåšã®master
ãã©ã³ãã§å確èªããŠããã ããŸããïŒ
ãã®ãã°ã¯4.1.0ã§ç¢ºèªã§ããŸã
ç§ã®èšå®ã§ïŒ
CELERY_TIMEZONE = 'Europe/Moscow'
ãããŠãã¯ããããã¯ããŸãæ©èœããŸãïŒ
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True
åãåé¡-ã»ããªããŒãã䜿çšããè€æ°ã®ãããžã§ã¯ãããããŸããããã®ãã¡ã®1ã€ãããŸããŸCELERY_TIMEZONEããããžã§ã¯ãã®ã¿ã€ã ãŸãŒã³ã§ããAmerica / NewYorkã«èšå®ããŸããã æåéããç§ã¯Rabbit QAãµãŒããŒã§1800äžã®ã¡ãã»ãŒãžã§ç®ãèŠããŸãããããã¯ãã¯ãŒã«ãŒããã¥ãŒã«å ¥ããããŠããé床ïŒ1åãããæ°çŸïŒã«è¿œãã€ããªãã£ãããã§ãã èšå®ãåé€ãããããžã§ã¯ããããã©ã«ãã®CELERY_TIMEZONE of Noneã«ãããšãåé¡ã解決ããŸããã
FWIW--DatabaseSchedulerã䜿çšããŠãããšã¯æããŸããã ãã¶ããåé¡åã®ååãå€æŽããå¿ èŠããããŸããïŒ
@matteius @AyumuKasuga master
ãã©ã³ãã§ãã¹ããå®è¡ããŠä¿®æ£ãæ€èšŒã§ããã°ãããã¯çŽ æŽãããããšã§ãã åé¡ããè©«ã³ç³ãäžããŸãã
ããã«ã¡ã¯@georgepsarakis ïŒ
ãã¹ã¿ãŒãã©ã³ãããã¹ãããã°ããã§ãããæ®å¿µãªããã»ããã¢ããã§ã¯åé¡ã解決ããŠããŸããã
ãã£ã¡ãäžç·ïŒ
ããã
ç§ãåæ§ã®åé¡ãæ±ããŠããŸãã http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.htmlããdjango-celery-beatã®ã»ããã¢ããæé ã«åŸããŸããã
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True
CELERY_RESULT_BACKEND = 'django-db'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
次ã«ãå®æçãªã¿ã¹ã¯ãå®çŸ©ããŸãã
@periodic_task(run_every=timedelta(seconds=30))
def do_stuff():
print("HI")
ã»ããªããŒããéå§ãããšã次ã®åºåãåŸãããŸãã
$> DJANGO_SETTINGS_MODULE="proj.settings.dev" celery -A proj beat -l info
celery beat v4.1.0 (latentcall) is starting.
__ - ... __ - _
LocalTime -> 2017-08-28 15:58:44
Configuration ->
. broker -> amqp://guest:**<strong i="14">@localhost</strong>:5672//
. loader -> celery.loaders.app.AppLoader
. scheduler -> django_celery_beat.schedulers.DatabaseScheduler
. logfile -> [stderr]@%INFO
. maxinterval -> 5.00 seconds (5s)
[2017-08-28 15:58:44,425: INFO/MainProcess] Writing entries...
[2017-08-28 15:58:45,629: INFO/MainProcess] DatabaseScheduler: Schedule changed.
[2017-08-28 15:58:45,630: INFO/MainProcess] Writing entries...
å®æçãªã¿ã¹ã¯ã¯ããŒã¿ããŒã¹ã«ååšãã enabled
ãšããŠããŒã¯ãããŠããŸãã
ãã ããã»ããªã¯ãŒã«ãŒã¯ãå®æçãªã¿ã¹ã¯ãåä¿¡ãŸãã¯å®è¡ããŸããã
$> DJANGO_SETTINGS_MODULE="proj.settings.dev" celery -A proj worker -l info -E
-------------- celery@proj-dev v4.0.2 (latentcall)
---- **** -----
--- * *** * -- Linux-4.4.0-83-generic-x86_64-with-Ubuntu-16.04-xenial 2017-08-28 15:57:42
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: proj:0x7f89f78faeb8
- ** ---------- .> transport: amqp://guest:**<strong i="20">@localhost</strong>:5672//
- ** ---------- .> results:
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ---- .> task events: ON
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery
[tasks]
. proj.tasks.do_nothgin
. proj.tasks.do_stuff
[2017-08-28 15:57:42,269: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2017-08-28 15:57:42,287: INFO/MainProcess] mingle: searching for neighbors
[2017-08-28 15:57:43,324: INFO/MainProcess] mingle: all alone
ãœãããŠã§ã¢ïŒ
celery==4.1.0
django-celery-beat==1.0.1
django-celery-results==1.0.1
Django==1.8.2
ãã®åé¡ã解決ããããã®ã¢ã€ãã¢/ãã«ããæè¿ããŸãã
äžçªã
ã»ãã¹ãã£ã³
ããããšã®äžéšã åäœããŸããã
@ mchen-scala OSSãããžã§ã¯ãã¯ãååçã§å®¢èŠ³çã§å»ºèšçãªæ¹è©å®¶ã®ããã®ãã®ã ãšæããŸãã ããããšã«äœè¡ã®ã³ãŒããå ¥ããŸãããïŒ ç§ã¯å®éã«ããŒããå®ç§ã«æ©èœããŠããã»ããªãæã£ãŠããŸãã
ç§ã¯ããªãããããŸã§ã«æã£ãŠãããããã¯ããã«é«åºŠãªã·ã¹ãã ãæ§ç¯ããŸããã ç§ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãäœæããé«é »åºŠååŒãã©ãããã©ãŒã ãšå€§èŠæš¡ãªã¯ãã¹ããŒã¿ã»ã³ã¿ãŒDBãæ§ç¯ããŸããã ãªã©ãªã©ã
ã³ãŒãè¡ïŒ ç§ã¯æ©èœããã·ã¹ãã ã ããèŠãŠããŸãã LOCã¯ã¿ã€ãçšã§ãã
ç¶æ¿ããã·ã¹ãã ã§äœ¿çšããŠãããããCeleryã䜿çšããå¿ èŠããããŸãã ç§ã¯ãããåãé€ããæåã®é éãçµãã£ããèªåã§æžãã€ããã§ãã
ããŒãã®åé¡ã«å ããŠãã¿ã¹ã¯ã®å®è¡ã§æ倧1åã®ããããã£ã確ä¿ããããã«ããã¯ã䜿çšããããã«äººã ã«æ±ããããšã¯ã巚倧ãªãžã§ãŒã¯ã§ãã
é«çµŠã®ä»äºãåŸãããšãã§ããªãã®ã§ãããªããåŸæãªããšãã€ãŸãOSSã«åºå·ããŠãã ããã
@ mchen-scalaããªãã¯äººçã§è€éãªã·ã¹ãã ãæžããããšããªãããã®ãã±ããã®ã³ã³ããã¹ããç解ããããšããã§ããŸãããã€ãŸããCelery 4ã·ãªãŒãºã§ã¯ãã¿ã€ã ãŸãŒã³ãUTCã§ãªãå Žåã«CELERY_BEAT_SCHEDULEã«åŸããªãããŒãžã§ã³ãããã€ããããŸãã
ããªãã®ãã€ã³ãã¯ãã¹ãŠäžæ£ç¢ºã§ãå€ãã®ã¬ãã«ã§äŸ®èŸ±çã§ãã åè«ã¯ãããªããããã«æ¥ãŠãå€ãã®æ¥çã®å€ãã®äººã ã®ããŒãºã«åã£ãOSSãããžã§ã¯ãã«åãçµãã§ããããšã䟮蟱ããããšã§ãã ããªããéçšäž»ã®ããã«æžããããšã®ãããã®ã¯ãCeleryãããžã§ã¯ãã»ã©æ¥ã®ç®ãèŠãŠããªããšæããŸãã ããªãã¯å®éã«ããªãã®ä»¥åã®äœåã®ã©ããåç §ããŠããªãã®ã§ã ã¢ãžã£ã€ã«ã®äžçã§ã¯ã2ã4é±éããšã«ãªãªãŒã¹ããããšã«ãªããŸãããããã£ãŠãæ§ç¯ãããšæããããããã®ãã°ãããã·ã¹ãã ã§ã¯ãªããç¶æ¿ãããããžã§ã¯ãã«åãçµãã§ãããšããäºå®ã¯ãèªå°å¿ãèšããã§ããããšã瀺ããŠããã«ãããŸããã
ããã«ãmchen-scalaã§ã¯ãã»ããªã®ã¹ã€ãããåãããšããå§ãããŸããããã¯äž»ã«ãã³ãã¥ããã£ã§ã®ããªãã®æ 床ãå¿ èŠãªãããã§ãã ç§ã¯OSSã掻çšããåé¡ãçºçãããšãã«ãããä¿®æ£ããããã®ãµããŒããæäŸã§ãããããé«çµŠã®ä»äºãããŠããŸãã ç§ã¯ããªããããªãèªèº«ã®ãã³ãã©ã«åŸããããªããåŸæãªããšã«åºå·ããããšãææ¡ããŸããããã¯æããã«ããªãèªèº«ã®è§£æ±ºçãæ¢åã®è§£æ±ºçã®åé¡ã«è»¢ãããç§ãã¡ã®ä»ã®äººã ã«ãšã£ãŠå瀟äŒçãªãžã£ãŒã¯ã§ãã ãã£ïŒ
ãã§ã«ã¿ã€ã ãŸãŒã³ãèªèããŠããæ¥æããå®éã®ã¿ã€ã ãŸãŒã³ãªãã»ããã§ã¯ãªããšç¢ºä¿¡ããŠãããªãã»ãã+20ã®å°æ¥ã®æ¥æã«å€æããŠããã³ãŒãã®æ£ç¢ºãªè¡ãç¹å®ããŸããã
2017-10-11 22ïŒ42ïŒ27.041931-04ïŒ00ã¯ããã«ãªã¯ãšã¹ãã®è¡ã§2017-10-12 22ïŒ42ïŒ27.041931 + 20ïŒ00ã«å€æãããŸãã
ã©ãããUTCã¢ãŒãã§ã¯ãdatetimeãªããžã§ã¯ãã¯ã³ãŒãã®ãã®æç¹ã§åããŸãŸã§ãã ãããã£ãŠã次ã«èµ·ããããšã¯ãremaining_deltaã®çµæã-1æ¥ãã¿ã¹ã¯ã¹ã±ãžã¥ãŒã«ãã1ïŒ27ïŒ32.958069é
ããŠãããšè§£éãããããšã§ãã ãã®ãããã¿ã¹ã¯ãéä¿¡ããåžžã«é
ããŠãããããé·ãã¹ãªãŒãããŸããã ã¿ã¹ã¯ãæã¡è² ããç¶ããã¿ã¹ã¯ã®æéãåãããŸã§åžžã«-1æ¥ãããããã§ãã
確ãã«ç§ã®PRã¯å®éã®å€ãã³ãŒãè¡ãã³ã¡ã³ãã¢ãŠãããŠããŸãããããã§ããã¹ãŠã®åäœãã¹ãã¯åæ Œããããã§ãç§ã®ãã¹ãã§ã¯ãã®åé¡ã解決ããŸããã å ±åç·šéè ã®ãã£ãŒãããã¯ããèŠãŠãã ããã
ç§ã¯ãããPython2.7ãšPython3.5ããã³3.6ããŒãžã§ã³ã®åé¡ã§ããããšã瀺ããŸããã ä»ã®ããŒãžã§ã³ã®ãã°ã§ã¯ãªãããšã¯èšããŸã§ããããŸãããããããã¯ç§ãç°å¢ãã»ããã¢ãããããã®ã«ãããŸããã
ããŒãã«ããŒã¿ããŒã¹ã䜿çšããªãããšãããdjango-celery-beatã䜿çšããããã«ç§»è¡ããããšããŸãã...ãã®æ¥ã¯äž»ã«githubã®åé¡ãèªãã§ããŸãã:(
CELERY_TIMEZONE = 'UTC'
ã䜿çšããŠãããšãã«ããããæ©èœããªã人ã¯ä»ã«ããŸããïŒ ãã®ã»ããã§ãåäœãããã®ã«åé¡ããããŸãã
@xeor CELERY_ENABLE_UTC = Trueãèšå®ããå¿ èŠãããå ŽåããããŸã
localizeïŒïŒã«æž¡ãããæ¥æã®å®éã®åé¡ã¯ããããžã§ã¯ãã«UTCã§ã¯ãªãããŒã«ã«ã¿ã€ã ãŸãŒã³ãèšå®ãããŠããå Žåããã®æ¥æã¯localizeã«å ¥ãã®ããã§ã«æ£ããããšã§ãããdt = dt.astimezoneïŒtzïŒã¯ãããã«å€æããŸããæå³ã®ãªãã¿ã€ã ãŸãŒã³ãæã€ç¡æå³ãªå°æ¥ã®æ¥æã
@xeor次ã®èšå®ã§ãåãåé¡ãçºçããŠããŸããã
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
ä»ãç§ã¯ãããã°ãããŠããããã«èŠããããšãç¥ã£ãŠããŸãããç§ã¯Celeryãšdjango-celery-beatã®äž¡æ¹ãã¢ã³ã€ã³ã¹ããŒã«ããææ°ããŒãžã§ã³ã§ããããåã€ã³ã¹ããŒã«ããããã¯æ©èœããŸããã
ããããšã..éãæªãã£ãã®ã§ãããã3ã€ãã¹ãŠãè©ŠããŠã¿ãŸããã
åŸã§ãç°å¢ãã¯ãªãŒã³ã«åæ§ç¯ããŠè©ŠããŠã¿ãŸãã
@xeorãŸãããã®åé¡ãããªããçµéšããŠããåé¡ã§ã¯ãªãå¯èœæ§ã¯éåžžã«é«ãã§ãããããããããã§ãã ãã®ãã±ããã®ã¢ããã€ã¹ã¯ããããŸã§ã«ãã®åé¡ãçºçãããã¹ãŠã®ãŠãŒã¶ãŒã«å¯ŸããŠäžè²«ããŠãããã¹ã±ãžã¥ãŒã«ãããã¿ã¹ã¯ã®ãã¥ãŒã€ã³ã°ãå¶åŸ¡äžèœã«ãªããã¿ã¹ã¯ãèç©ããããã®ããã«é©åã«åŠçãããªããªããŸãã ãšã©ãŒãäºæããªãçµæã«ã€ããŠå€ãã®è©³çŽ°ãæ®ããŠããªãããã«èŠããã®ã§ãå ·äœçãªåé¡ã«ã€ããŠè©³ãã説æããŠããã ããŸããïŒ
ãã€ã§ãåãã§ãæäŒãããŸãã DatabaseSchedulerãªãã§ãã®åé¡ãçºçããã¿ã€ã ãŸãŒã³ãå€æŽããã ãã§ä¿®æ£ãããããšã«æ³šæããŠãã ããã ç§ã®ãã¹ãã§ã¯ããã®ãã°ã®ååŸã«çæãããã¹ã±ãžã¥ãŒã«ãã¡ã€ã«ãåäžã§ããããšã瀺ããã®ã§ããã°ã¯ã¹ã±ãžã¥ãŒã©ãŒã«é¢ãããã®ã§ã¯ãªããlocalizeïŒïŒåŒã³åºãã«æž¡ãããæ¥æã®ã¿ã€ãã«é¢ãããã®ã ãšæããŸãã
ãããã¢ãããããããšãïŒ
æ¥é±ã®çµãããç¿é±ã®åã«ãããæ·±ãã«ãŒãããšãããšã¯ã§ããŸããã ãã®éããã®ã¹ã¬ããã®é²æç¶æ³ã«ã€ããŠèªå·±æ å ±ãæäŸãç¶ããŸãã
ã»ããã¢ãããç¹å¥ãªãã®ãã©ããã¯ããããŸããããdockerãamqpãrabbitmqãããã³ãã¹ãŠã®ææ°ããŒãžã§ã³ã®celery pythonããã±ãŒãžïŒrabbitmq thoã§ã¯ãããŸããïŒã䜿çšããŠããŸãïŒç³ãèš³ãããŸããããããã«envããªãã®ã§ã確èªã§ããŸãïŒã
åæ§ã®åé¡ããããŸããã»ããªããŒããæ©èœããªãå ŽåããããŸãïŒãããŒã«ãŒã«ã¿ã¹ã¯ãéä¿¡ããŸããïŒãããã«ã59åããšã«éä¿¡ããã¿ã¹ã¯ãå€ãããŸãã
æ¯åå®è¡ãããã¹ãã¿ã¹ã¯ãäœæããŸãã
[2017-11-09 20:52:00,052: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:53:00,049: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:54:00,019: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:55:00,027: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:56:00,049: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:57:00,004: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:58:00,045: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:00,032: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:00,035: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:00,037: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:00,044: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
...
[2017-11-09 20:59:59,977: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:59,979: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:59,981: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:59,986: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:59,989: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:59,994: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 20:59:59,997: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 21:00:00,000: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 21:01:00,047: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 21:02:00,047: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
[2017-11-09 21:03:00,053: INFO/MainProcess] Scheduler: Sending due task test-task (tasks.test.test_task)
59åã«äžé£ã®ã¿ã¹ã¯ã®å®è¡ãéå§ãããæéã0åã«éãããšãæåŸ
ã©ããã«å床å®è¡ãããŸãã
ãã®ãã°ã«ã€ããŠã¯ããããŸããã
ããã¯ã»ããª4.1.0ã§ã®ç§ã®èšå®ã§ã
timezone = 'Asia/Seoul'
enable_utc = False
ã¹ã±ãžã¥ãŒã«ã«ãã¡ã€ã«ããŒã¿ããŒã¹ã䜿çšããŠããŸã
ãã®åé¡ã¯ãpython 3.6.3ãpytz 2017.3ãdjango 1.11.7ãcelery 4.1.0ãããã³django-celery-beat1.1.0ã§ãçºçããŸãã
æåã«ããŒã¿ããŒã¹ãã¯ã€ãããŸãã
#update django_celery_beat_periodictask set last_run_at = NULL;
#select name, last_run_at from django_celery_beat_periodictask;
name | last_run_at
--------------------------+-------------------------------
celery.backend_cleanup |
> pipenv run celery beat -A appname -l debug --scheduler django_celery_beat.schedulers:DatabaseScheduler
Loading .env environment variablesâŠ
celery beat v4.1.0 (latentcall) is starting.
__ - ... __ - _
LocalTime -> 2017-11-30 08:28:58
Configuration ->
. broker -> amqp://guest:**<strong i="9">@localhost</strong>:5672//
. loader -> celery.loaders.app.AppLoader
. scheduler -> django_celery_beat.schedulers.DatabaseScheduler
. logfile -> [stderr]@%DEBUG
. maxinterval -> 5.00 seconds (5s)
[2017-11-30 08:28:58,945: DEBUG/MainProcess] Setting default socket timeout to 30
[2017-11-30 08:28:58,946: INFO/MainProcess] beat: Starting...
[2017-11-30 08:28:58,946: DEBUG/MainProcess] DatabaseScheduler: initial read
[2017-11-30 08:28:58,946: INFO/MainProcess] Writing entries...
[2017-11-30 08:28:58,968: DEBUG/MainProcess] DatabaseScheduler: Fetching database schedule
[2017-11-30 08:28:59,068: DEBUG/MainProcess] Current schedule:
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4 * * * (m/h/d/dM/MY)>>
[2017-11-30 08:28:59,115: INFO/MainProcess] DatabaseScheduler: Schedule changed.
[2017-11-30 08:28:59,115: INFO/MainProcess] Writing entries...
[2017-11-30 08:28:59,115: DEBUG/MainProcess] DatabaseScheduler: Fetching database schedule
[2017-11-30 08:28:59,121: DEBUG/MainProcess] Current schedule:
<ModelEntry: celery.backend_cleanup celery.backend_cleanup(*[], **{}) <crontab: 0 4 * * * (m/h/d/dM/MY)>>
[2017-11-30 08:28:59,122: DEBUG/MainProcess] beat: Ticking with max interval->5.00 seconds
[2017-11-30 08:28:59,138: DEBUG/MainProcess] Start from server, version: 0.9, properties: {'capabilities': {'publisher_confirms': True, 'exchange_exchange_bindings': True, 'basic.nack': True, 'consumer_cancel_notify': True, 'connection.blocked': True, 'consumer_priorities': True, 'authentication_failure_close': True, 'per_consumer_qos': True, 'direct_reply_to': True}, 'cluster_name': 'rabbit<strong i="10">@Jupiter</strong>', 'copyright': 'Copyright (C) 2007-2017 Pivotal Software, Inc.', 'information': 'Licensed under the MPL. See http://www.rabbitmq.com/', 'platform': 'Erlang/OTP 20.1', 'product': 'RabbitMQ', 'version': '3.6.14'}, mechanisms: [b'AMQPLAIN', b'PLAIN'], locales: ['en_US']
[2017-11-30 08:28:59,152: DEBUG/MainProcess] using channel_id: 1
[2017-11-30 08:28:59,153: DEBUG/MainProcess] Channel open
[2017-11-30 08:28:59,154: DEBUG/MainProcess] beat: Synchronizing schedule...
[2017-11-30 08:28:59,155: INFO/MainProcess] Writing entries...
[2017-11-30 08:28:59,160: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,161: DEBUG/MainProcess] celery.backend_cleanup sent. id->1dd626be-1dea-43ec-b000-ab61fdd33f9d
[2017-11-30 08:28:59,163: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,163: DEBUG/MainProcess] celery.backend_cleanup sent. id->7a9c7d44-e570-4a5a-9803-0a8e5111f035
[2017-11-30 08:28:59,165: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,166: DEBUG/MainProcess] celery.backend_cleanup sent. id->114ee8e1-4b3c-4f43-a632-9a249d7db364
[2017-11-30 08:28:59,167: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,168: DEBUG/MainProcess] celery.backend_cleanup sent. id->5b7f3825-d6c8-43a5-b056-2d567ec2c4df
[2017-11-30 08:28:59,170: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,171: DEBUG/MainProcess] celery.backend_cleanup sent. id->f1bfb936-0dd1-47b6-be10-3763d4446758
[2017-11-30 08:28:59,172: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,173: DEBUG/MainProcess] celery.backend_cleanup sent. id->7a12f2da-3717-45ab-b018-6b4fd7b83982
[2017-11-30 08:28:59,175: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,175: DEBUG/MainProcess] celery.backend_cleanup sent. id->64fbd61d-e80e-4a32-a49d-31ddc7e155c7
[2017-11-30 08:28:59,177: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,179: DEBUG/MainProcess] celery.backend_cleanup sent. id->ff38e88e-e7e8-4436-9724-9c416dde4d72
[2017-11-30 08:28:59,181: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
[2017-11-30 08:28:59,181: DEBUG/MainProcess] celery.backend_cleanup sent. id->d5116c47-df14-4f3e-a4d1-09087cd1af80
[2017-11-30 08:28:59,183: INFO/MainProcess] Scheduler: Sending due task celery.backend_cleanup (celery.backend_cleanup)
...
ãããŠããã¥ãŒã¯600 /ç§ã®é床ã§ãã£ã±ãã«ãªãç¶ããŸãã
# select name, last_run_at from django_celery_beat_periodictask;
name | last_run_at
--------------------------+-------------------------------
celery.backend_cleanup | 2017-11-30 16:40:59.352453-08
ç§ã®èšå®ã¯æ¬¡ã®ãšããã§ãïŒããã¥ã¡ã³ããéåžžã«äžæçã§ãããã€ãã®å Žæã§å€ããªã£ãŠãããããèŠã€ãããã¹ãŠã®ãã®ãèšå®ããŸããïŒïŒ
settings.py
CELERY_TIMEZONE = 'Canada/Pacific'
CELERY_ENABLE_UTC=False
USE_TZ = True
TIME_ZONE = 'Canada/Pacific'
celery.py
app = Celery('MyApp')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.conf.timezone = 'Canada/Pacific'
app.conf.enable_utc = False
ãããã£ãŠãã»ããªã08ïŒ28ïŒ59-08ã«ã¿ã¹ã¯ãå®è¡ããŠããããšã¯æããã§ãããlast_run_timeãä¿åãããšã16ïŒ28ïŒ59-08ãååŸããæéã«8æéè¿œå ãããŠããã DBã
schedules.pyããã£ãšèŠãŠã¿ããšãcrontab.is_dueïŒïŒããtimedeltaãŸãã¯ïŒç§ãè¿ãããŠããããšãããããŸãã
ããã§æãäžããæéã¯ãããããŸããããæããã«crontabã¯ã©ã¹å
ã®äœãããçŸåšã®æå»ãšçŸåšã®æå»ã®éã®ã¿ã€ã ãã«ã¿ãtz replaced
ïŒå€æãããŠããªãïŒã§ååŸããŠããŸãã
replace
ã¿ã€ã ãŸãŒã³ã®è¡ã¯éåžžã«çããããšæããŸãã
äºè§£ããŸãã-ãã®ãã°ãæ±ããŠãããã¹ãŠã®äººããã¹ã¿ãŒã®ã¯ããŒã³ãäœæããåé¡ãä¿®æ£ãããããšãåãã¹ãã§ããã°ã ç§ã®PRã¯æšå€ããŒãžããããã°ãä¿®æ£ãããããšã確èªããŸããããDBã¹ã±ãžã¥ãŒã©ãŒãŸãã¯ä»ã®ããã¯ãšã³ãã䜿çšããŠããå Žåã¯è¿œå ã®ç¢ºèªãååŸããããšããå§ãããŸãã ããããšãïŒ
976515108a4357397a3821332e944bb85550dfa2ãããé©çšããŠç¢ºèªããŠãã ãã
æãåèã«ãªãã³ã¡ã³ã
@ mchen-scalaããªãã¯äººçã§è€éãªã·ã¹ãã ãæžããããšããªãããã®ãã±ããã®ã³ã³ããã¹ããç解ããããšããã§ããŸãããã€ãŸããCelery 4ã·ãªãŒãºã§ã¯ãã¿ã€ã ãŸãŒã³ãUTCã§ãªãå Žåã«CELERY_BEAT_SCHEDULEã«åŸããªãããŒãžã§ã³ãããã€ããããŸãã
ããªãã®ãã€ã³ãã¯ãã¹ãŠäžæ£ç¢ºã§ãå€ãã®ã¬ãã«ã§äŸ®èŸ±çã§ãã åè«ã¯ãããªããããã«æ¥ãŠãå€ãã®æ¥çã®å€ãã®äººã ã®ããŒãºã«åã£ãOSSãããžã§ã¯ãã«åãçµãã§ããããšã䟮蟱ããããšã§ãã ããªããéçšäž»ã®ããã«æžããããšã®ãããã®ã¯ãCeleryãããžã§ã¯ãã»ã©æ¥ã®ç®ãèŠãŠããªããšæããŸãã ããªãã¯å®éã«ããªãã®ä»¥åã®äœåã®ã©ããåç §ããŠããªãã®ã§ã ã¢ãžã£ã€ã«ã®äžçã§ã¯ã2ã4é±éããšã«ãªãªãŒã¹ããããšã«ãªããŸãããããã£ãŠãæ§ç¯ãããšæããããããã®ãã°ãããã·ã¹ãã ã§ã¯ãªããç¶æ¿ãããããžã§ã¯ãã«åãçµãã§ãããšããäºå®ã¯ãèªå°å¿ãèšããã§ããããšã瀺ããŠããã«ãããŸããã
ããã«ãmchen-scalaã§ã¯ãã»ããªã®ã¹ã€ãããåãããšããå§ãããŸããããã¯äž»ã«ãã³ãã¥ããã£ã§ã®ããªãã®æ 床ãå¿ èŠãªãããã§ãã ç§ã¯OSSã掻çšããåé¡ãçºçãããšãã«ãããä¿®æ£ããããã®ãµããŒããæäŸã§ãããããé«çµŠã®ä»äºãããŠããŸãã ç§ã¯ããªããããªãèªèº«ã®ãã³ãã©ã«åŸããããªããåŸæãªããšã«åºå·ããããšãææ¡ããŸããããã¯æããã«ããªãèªèº«ã®è§£æ±ºçãæ¢åã®è§£æ±ºçã®åé¡ã«è»¢ãããç§ãã¡ã®ä»ã®äººã ã«ãšã£ãŠå瀟äŒçãªãžã£ãŒã¯ã§ãã ãã£ïŒ