Обработчики ритма сельдерея on_after_configure / finalize не работают с add_periodic_task - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь использовать Celery и его функцию Celery beat для планирования задач. Я пытаюсь создать «привет мир» с ритмом сельдерея с помощью on_after_configure / finalize, но он не показывает никакого журнала.

Я попытался установить часовые пояса в формате UTC для проекта и сельдерея. Я попытался использовать декоратор @shared_task и другие настройки. Тем не менее мне удалось запланировать задачу с помощью декоратора @periodic_task. Не могли бы вы помочь мне с этой проблемой обработчика / сигнала? Спасибо

settings.py

TIME_ZONE = 'UTC'
USE_TZ = True
...
CELERY_RESULT_BACKEND = 'django-db'
CELERY_CACHE_BACKEND = 'django-cache'
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True

celery.py (НЕ РАБОТАЕТ - НЕ ПОКАЗЫВАЕТ ЗАДАНИЕ В ЖУРНАЛЕ)

from __future__ import absolute_import, unicode_literals
from celery import Celery
from celery.task import periodic_task

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','monkyroproject.settings')

celeryapp2 = Celery('monkyroproject',
             broker='amqp://',
             backend='amqp://',
             include=['monkyroproject.tasks'])

celeryapp2.conf.update(
    result_expires=3600,
)

if __name__ == '__main__':
    celeryapp2.start()

@celeryapp2.task
def test1():
    print("Hello World")
    return('Test1 well executed')

@celeryapp2.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    sender.add_periodic_task(10.0,test1.s(),name = 'iterate every 10 sec')

celery.py (РАБОТАЕТ)

from __future__ import absolute_import, unicode_literals
from celery import Celery
from celery.schedules import crontab
from celery.task import periodic_task

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE','monkyroproject.settings')

celeryapp2 = Celery('monkyroproject',
             broker='amqp://',
             backend='amqp://',
             include=['monkyroproject.tasks'])

celeryapp2.conf.update(
    result_expires=3600,
)

if __name__ == '__main__':
    celeryapp2.start()

@periodic_task(run_every=crontab(minute='*'),name='test_beat',ignore_result=False)
def test_beat():
    print('Hello World')
    return 'Test Beat well done'

Я ожидаю, что расписание изменится и покажет отправляемую задачу.

[2019-11-03 03:19:58,753: INFO/MainProcess] beat: Starting...
[2019-11-03 03:19:58,762: INFO/MainProcess] Writing entries...
[2019-11-03 03:20:00,328: INFO/MainProcess] DatabaseScheduler: Schedule changed.
[2019-11-03 03:20:00,330: INFO/MainProcess] Writing entries...
[2019-11-03 03:20:05,430: INFO/MainProcess] Writing entries...
[2019-11-03 03:21:00,029: INFO/MainProcess] Scheduler: Sending due task test_beat (test_beat)
[2019-11-03 03:21:00,042: WARNING/MainProcess] c:\users\idriss\django_projects\monkyroproject\virtual002\lib\site-packages\celery\backends\amqp.py:67: CPendingDeprecationWarning:
    The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.

  alternative='Please use RPC backend or a persistent backend.')
[2019-11-03 03:22:00,005: INFO/MainProcess] Scheduler: Sending due task test_beat (test_beat)
[2019-11-03 03:23:00,002: INFO/MainProcess] Scheduler: Sending due task test_beat (test_beat)

Это только показывает мне это

LocalTime -> 2019-11-03 03:25:19
Configuration ->
    . broker -> amqp://guest:**@localhost:5672//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> django_celery_beat.schedulers.DatabaseScheduler

    . logfile -> [stderr]@%INFO
    . maxinterval -> 5.00 seconds (5s)
[2019-11-03 03:25:19,192: INFO/MainProcess] beat: Starting...
[2019-11-03 03:25:19,193: INFO/MainProcess] Writing entries...
[2019-11-03 03:25:24,747: INFO/MainProcess] Writing entries...
...