gpt4 book ai didi

python - celery 节拍 - 每个任务的时区不同

转载 作者:行者123 更新时间:2023-11-28 19:49:13 28 4
gpt4 key购买 nike

我正在使用 celery beat 来安排一些任务。我可以使用 CELERY_TIMEZONE 设置来使用 crontab 计划来安排任务,它会在上述时区的预定时间运行。

但我希望能够在同一个应用程序(单个 django settings.py)中为不同的时区设置多个这样的任务。我知道在安排任务时哪个任务需要在哪个时区运行。

是否可以为每个任务指定不同的时区?

我将 django (1.4) 与 celery (3.0.11) 和 django celery (3.0.11) 一起使用。

我查看了 djcelery.schedulers.DatabaseScheduler 类及其基类,但我无法弄清楚时区的使用方式和位置。我可以编写一个自定义调度程序,使每个作业在不同的时区运行吗?

谢谢,

最佳答案

您可以在 celery 计划中实现单个任务的时区感知计划。通过这种方式,您可以通过为每个 celery 计划指定一个单独的 now 函数

,根据特定时区的本地时间运行任务(也可以调整为例如夏令时)

crontab 支持 nowfun argument指定用于检查它是否应该运行的日期时间函数

import datetime
import pytz
nowfun = lambda: datetime.datetime.now(pytz.timezone('Europe/Berlin'))

在您的日程安排中,通过以下方式将此函数设置为日期时间函数

'periodic_task': {
'task': 'api.tasks.periodic',
'schedule': crontab(hour=6, minute=30, nowfun=nowfun)
}

每天早上 6.30 CET 运行,调整为夏令时。

如果您多次使用该函数,请考虑创建一个助手

from functools import partial
cet_crontab = partial(crontab, nowfun=nowfun)
'periodic_task': {
'task': 'api.tasks.periodic',
'schedule': cet_crontab(hour=6, minute=30)
}

确保您设置了 CELERY_ENABLE_UTC = False,否则 celery 会将您的日程安排转换为 UTC。

关于python - celery 节拍 - 每个任务的时区不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827290/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com