Расписание сельдерея, не могу мариновать nowfun

Я пытаюсь настроить Celery на запуск разных задач в разных часовых поясах с учетом перехода на летнее время. Я настроил свою задачу следующим образом:

import datetime
import pytz
from celery import Celery
from celery.schedules import crontab

app = Celery('my_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

NOW_MT = lambda: datetime.datetime.now(pytz.timezone('America/Denver'))

app.conf.beat_schedule = {
    "My Daily Mountain Time Task": {
        "task": "app.tasks.some_task",
        "schedule": crontab(minute='0', hour='0', nowfun=NOW_MT)
    },
    "My Daily UTC Task": {
        "task": "app.tasks.some_other_task",
        "schedule": crontab(minute='0', hour='0')
    }
}

Но мой процесс избиения сельдерея выдает ошибку со следующим сообщением:

Can't pickle <function <lambda> at 0x7f71055a4670>: attribute lookup <lambda> on app.celery failed

Используйте функцию вместо лямбда-функций

import datetime
import pytz
from celery import Celery
from celery.schedules import crontab

app = Celery('my_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

def NOW_MT():
    return datetime.datetime.now(pytz.timezone('America/Denver'))

app.conf.beat_schedule = {
    "My Daily Mountain Time Task": {
        "task": "app.tasks.some_task",
        "schedule": crontab(minute='0', hour='0', nowfun=NOW_MT)
    },
    "My Daily UTC Task": {
        "task": "app.tasks.some_other_task",
        "schedule": crontab(minute='0', hour='0')
    }
}
Вернуться на верх