Я использовал сельдерей в джанго. Запланированное задание сельдерея истекло постоянно, как только сельдерей запустился. На самом деле я ожидал, что эта задача выполняется вручную. Я не нашел причин, по которым та же задача истекла бесконечно без каких-либо опций после запуска "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
Если есть кто решал подобную проблему, подскажите, пожалуйста, как ее решить.
На самом деле проблема возникла до добавления опции. Проблема возникла независимо от того, установлено ли значение «да» или «нет». «CELERY_ALWAYS_EAGER = True» добавлено для отладки. После установки этой опции он может получить распечатку результата выполнения. Я нашел похожую проблему. github.com/celery/celery/issues/4041, но это не помогло.
Я изменил rabbitmq на redis. И в настройках сельдерея CELERY_ENABLE_UTC = True, CELERY_TIMEZONE = 'UTS'. вроде работает. А в сельдерее 4.2.0 CELERY_ENABLE_UTC = False, CELERY_TIMEZONE = 'Location / City' выглядит работающим.






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