Задача Django Celery неоднократно истекала без какого-либо вызова, как только запускался celery

Я использовал сельдерей в джанго. Запланированное задание сельдерея истекло постоянно, как только сельдерей запустился. На самом деле я ожидал, что эта задача выполняется вручную. Я не нашел причин, по которым та же задача истекла бесконечно без каких-либо опций после запуска "celery -A proj worker -l info -BE". Я сделал чистку, но это случилось снова.

[2018-05-27 18:37:22,466: INFO/Beat] beat: Starting...
[2018-05-27 18:37:22,479: INFO/Beat] Writing entries...
[2018-05-27 18:37:22,543: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2018-05-27 18:37:22,595: INFO/MainProcess] mingle: searching for neighbors
[2018-05-27 18:37:22,679: INFO/Beat] DatabaseScheduler: Schedule changed.
[2018-05-27 18:37:22,679: INFO/Beat] Writing entries...
[2018-05-27 18:37:22,727: INFO/Beat] Scheduler: Sending due task ex_rate_update_task (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,731: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,732: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,732: WARNING/Beat] 2018-05-27 18:37:22.730208
[2018-05-27 18:37:22,733: INFO/Beat] Task celery_task.updateInfo[54b6ab8d-d8ce-4806-a5d6-70860d75eb02] succeeded in 0.0034391450171824545s: None
[2018-05-27 18:37:22,734: INFO/Beat] Writing entries...
[2018-05-27 18:37:22,754: INFO/Beat] Scheduler: Sending due task ex_rate_update_task (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,757: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,757: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,757: WARNING/Beat] 2018-05-27 18:37:22.756909
[2018-05-27 18:37:22,757: INFO/Beat] Task celery_task.updateInfo[4acdf40b-c4a4-4551-ab57-f1f9671abc82] succeeded in 0.0010353299730923027s: None
[2018-05-27 18:37:22,759: INFO/Beat] Scheduler: Sending due task ex_rate_update_task (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,760: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,760: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,764: WARNING/Beat] 2018-05-27 18:37:22.760353
[2018-05-27 18:37:22,764: INFO/Beat] Task celery_task.updateInfo[ba6ddfa9-b1f7-4d4f-972e-6bef96ddb0d3] succeeded in 0.004193355998722836s: None
[2018-05-27 18:37:22,766: INFO/Beat] Scheduler: Sending due task celery_task.updateInfo (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,767: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,768: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,768: WARNING/Beat] 2018-05-27 18:37:22.767552
[2018-05-27 18:37:22,769: INFO/Beat] Task celery_task.updateInfo[7f36b3f8-250e-4ed1-8490-9aeb8bdc8b58] succeeded in 0.001550107990624383s: None
[2018-05-27 18:37:22,771: INFO/Beat] Scheduler: Sending due task celery_task.updateInfo (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,772: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,773: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,773: WARNING/Beat] 2018-05-27 18:37:22.772135
[2018-05-27 18:37:22,774: INFO/Beat] Task celery_task.updateInfo[128f4b24-abd5-4356-8e49-abe452862b03] succeeded in 0.0021281989756971598s: None
[2018-05-27 18:37:22,776: INFO/Beat] Scheduler: Sending due task celery_task.updateInfo (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,782: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,783: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,783: WARNING/Beat] 2018-05-27 18:37:22.782599
[2018-05-27 18:37:22,783: INFO/Beat] Task celery_task.updateInfo[a111ebac-1789-4146-bb2f-456c11523e5b] succeeded in 0.0013831660035066307s: None
[2018-05-27 18:37:22,785: INFO/Beat] Scheduler: Sending due task celery_task.updateInfo (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,786: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,786: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,787: WARNING/Beat] 2018-05-27 18:37:22.786397
[2018-05-27 18:37:22,787: INFO/Beat] Task celery_task.updateInfo[8e4968ef-63e6-4c89-840d-7b6896e2527a] succeeded in 0.0011660069867502898s: None
[2018-05-27 18:37:22,793: INFO/Beat] Scheduler: Sending due task celery_task.updateInfo (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,795: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,796: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,796: WARNING/Beat] 2018-05-27 18:37:22.794904
[2018-05-27 18:37:22,796: INFO/Beat] Task celery_task.updateInfo[32bfea36-1c43-42db-852b-86ebd3415f68] succeeded in 0.002016467013163492s: None
[2018-05-27 18:37:22,798: INFO/Beat] Scheduler: Sending due task celery_task.updateInfo (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,798: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,798: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,799: WARNING/Beat] 2018-05-27 18:37:22.798665
[2018-05-27 18:37:22,799: INFO/Beat] Task celery_task.updateInfo[24b58f54-7f50-4e1a-ab31-1e61514c7b87] succeeded in 0.0008888209995348006s: None
[2018-05-27 18:37:22,800: INFO/Beat] Scheduler: Sending due task celery_task.updateInfo (celery_task.tasks.updateInfo)
[2018-05-27 18:37:22,801: WARNING/Beat] scehduled >
[2018-05-27 18:37:22,801: WARNING/Beat] => update_task :
[2018-05-27 18:37:22,801: WARNING/Beat] 2018-05-27 18:37:22.801377
.
.
.

Я вообще не запускал никаких задач. Но когда я запускаю сельдерей, задачи истекают бесконечно автоматически. Я не знаю, почему это произошло. Я изменил часовой пояс, вариант UTC, но это не сработало.

Ниже приведены параметры celery_settings.

app.conf.update(
    CELERY_IMPORTS=(
        'celery_task.crawl.tasks',
    ),
    CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//',
    CELERY_ACCEPT_CONTENT = ['json'],
    CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite',
    CELERYBEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler',
    CELERY_TASK_SERIALIZER = 'json',
    CELERY_RESULT_SERIALIZER = 'json',
    USE_TZ = True,
    CELERY_ENABLE_UTC = False,
    CELERY_TIMEZONE = 'Asia/Seoul',
    CELERY_ALWAYS_EAGER = True,
)

Ниже приведен код задачи

from celery import current_app
from celery import Celery
from celery.schedules import crontab
from project.celery_settings import app
from celery import shared_task, task

import datetime

app = current_app._get_current_object()

@app.on_after_finalize.connect
def setup_periodic_tasks(sender=app, **kwargs):
    print('>> setup_periodic_task - started ', app)
    #from celery_task.crawl.tasks import updateExRates
    task_id = sender.add_periodic_task(
        crontab(minute='*/3'),
        updateInfo.s('=> update_task : '),
        name='ex_rate_update_task',
    )
    print('>> setup_periodic_task : ', task_id, ' time: ', datetime.datetime.now())

@app.task
def updateInfo(arg):
    print('scehduled > ', arg, datetime.datetime.now()

)

Информация о версии следующая.

django 2.0.5
celery 4.1.1
django_celery_beat 1.1.1
python 3.6

Если есть кто решал подобную проблему, подскажите, пожалуйста, как ее решить.

Из документации: If CELERY_ALWAYS_EAGER is True, all tasks will be executed locally by blocking until the task returns. Попробуй поставить CELERY_ALWAYS_EAGER = False,

neverwalkaloner 27.05.2018 16:06

На самом деле проблема возникла до добавления опции. Проблема возникла независимо от того, установлено ли значение «да» или «нет». «CELERY_ALWAYS_EAGER = True» добавлено для отладки. После установки этой опции он может получить распечатку результата выполнения. Я нашел похожую проблему. github.com/celery/celery/issues/4041, но это не помогло.

mkjwa 27.05.2018 16:11

Я изменил rabbitmq на redis. И в настройках сельдерея CELERY_ENABLE_UTC = True, CELERY_TIMEZONE = 'UTS'. вроде работает. А в сельдерее 4.2.0 CELERY_ENABLE_UTC = False, CELERY_TIMEZONE = 'Location / City' выглядит работающим.

mkjwa 11.06.2018 08:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
103
0

Другие вопросы по теме