django-celery-beat
django-celery-beat copied to clipboard
The last_run_at time is always in UTC, which differs from my local configuration time.
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.
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@[email protected]:6379/0'
RESULT_BACKEND = 'redis://:Password@[email protected]: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, # 任务的过期时间
)
I only get the correct behavior when I set USE_TZ to True, but I don't want to change USE_TZ to True.
➕1️⃣ I have a same question.
Configuration in my setting.py file.
TIME_ZONE = "Asia/Shanghai"
USE_TZ = False
CELERY_TIMEZONE = TIME_ZONE
CELERY_ENABLE_UTC = False
DJANGO_CELERY_BEAT_TZ_AWARE = False
CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler"
def post(self, request: Request, *args, **kwargs):
PeriodicTask.objects.all().delete()
# 创建 IntervalSchedule
interval_schedule, created = IntervalSchedule.objects.get_or_create(
every=5, period=IntervalSchedule.SECONDS
)
# 计算结束时间
end_time = datetime.now() + timedelta(seconds=30)
# 创建PeriodicTask
periodic_task = PeriodicTask(
interval=interval_schedule,
name=f"periodic_task_{timezone.now()}",
task="publish.tasks.periodic_tasks",
args=json.dumps([1, 2]),
expires=end_time,
)
periodic_task.save()
return ApiResponse()
expires this param is invalid
only support USE_TZ = True, to work properly