【发布时间】:2018-01-04 05:50:36
【问题描述】:
我正在开发一个Django 项目。
我想自动同步课程。
我的代码:
from datetime import timedelta
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
'sync-classes': {
'task': 'scheduler.tasks.sync_classes',
'schedule': crontab(hour='0', minute=0),
}
CELERY_ENABLE_UTC = False
CELERY_TIMEZONE = 'Europe/London'
它适用于伦敦时区。
每个班级都有不同的时区。我希望时间表根据课程的相关时区自动运行。
在sync_classes() 方法中,我获取所有课程并将其同步到伦敦时区。
问题:如何根据时区同步每个班级?
【问题讨论】:
-
你能澄清一下类的时区吗?您是否在模型上存储时区?比如...
user.timezone什么的?此外,该任务每天午夜运行(伦敦 TZ),对吗?你希望你的课程发生什么? -
@BorrajaX 我在类模型中存储了时区。该任务每天午夜运行。现在每节课都在伦敦时区运行。但它应该在其时区运行(应该在 class.timezone 中运行)。
-
我不认为你可以用 Celery 做到这一点......不完全是(
CELERY_TIMEZONE只意味着当你告诉它在午夜运行此任务时,是 伦敦的午夜。例如,我建议您每小时运行一次任务(而不是像现在这样每天运行),并在任务中获取当时午夜的时区,并且同步时区在这些时区的对象。 -
@BorrajaX 有没有办法在所有时区的午夜同步任务?
-
没有。首先,您不能保证您的条目(您的班级)将在午夜时分被访问。此外,时区也很混乱。您有一些时区在半小时内有偏移,甚至在 45 小时内(例如尼泊尔)
标签: python django timezone celerybeat