celery / django-celery-beat

Celery Periodic Tasks backed by the Django ORM
Other
1.68k stars 427 forks source link

Celery time is incorrect. #787

Open dxygit1 opened 3 months ago

dxygit1 commented 3 months ago

The last_run_at time is always in UTC, which differs from my local configuration time. This causes tasks to still run despite being expired. image

version

celery                  5.4.0
django-celery-beat      2.6.0
django-celery-results   2.5.1

config


USE_TZ = False

BROKER_URL = 'redis://:Password@123@172.16.120.12:6379/0'

RESULT_BACKEND  = 'redis://:Password@123@172.16.120.12:6379/0'

ACCEPT_CONTENT = ['json']
TASK_SERIALIZER = 'json'

RESULT_SERIALIZER = 'json'

TASK_RESULT_EXPIRES = 60 * 60 * 24

TIMEZONE = 'Asia/Shanghai'
CELERYBEAT_SCHEDULER = 'django_celery_beat.schedulers.DatabaseScheduler'

WORKER_CONCURRENCY = 20

WORKER_PREFETCH_MULTIPLIER = 20

WORKER_MAX_TASKS_PER_CHILD = 100

WORKER_DISABLE_RATE_LIMITS = True

ENABLE_UTC = False
DJANGO_CELERY_BEAT_TZ_AWARE = False
TASK_TIME_LIMIT = 30 * 60

Execute tasks.


from django_celery_beat.models import PeriodicTask, IntervalSchedule
schedule, created = IntervalSchedule.objects.get_or_create(
    every=10,
    period=IntervalSchedule.SECONDS,
)
from datetime import datetime, timedelta
expires=datetime.now() + timedelta(seconds=30)
periodic_task = PeriodicTask.objects.create(
    interval=schedule,  # 我们上面创建的调度
    name='task1',  # 唯一的任务名称
    task='task1',  # 任务的导包路径
    expires=expires,  # 任务的过期时间
)
dxygit1 commented 3 months ago

I only get the correct behavior when I set USE_TZ to True, but I don't want to change USE_TZ to True.

ThankCat commented 2 months ago

I got this issue too