'datetime.datetime'对象是不可调用的姜戈芹菜节拍



我在基于Docker的设置中有Django Celery和Beat。我的环境被划分为他们关心的环境。CCD_ 1保持CCD_ 2和CCD_。在我的common.py中,我正在初始化一个变量,类似于

from datetime import datetime
import pytz
est_timezone = datetime.now(pytz.timezone('EST'))

这是我得到的追踪

celery-beat_1  | [2021-04-09 10:59:46,845: CRITICAL/MainProcess] beat raised exception <class 'TypeError'>: TypeError("'datetime.datetime' object is not callable")

你可以把上面的片段放在一个shell中,它运行得很好,所以我不知道发生了什么。

这是使用est_timezone变量的地方

CELERY_BEAT_SCHEDULE = {
'fetch_rates_on_weekdays': {
'task': 'where the task at',
'schedule': crontab(hour=CELERY_TIME_FOR_FETCH_RATES_ON_WEEKENDS, day_of_week='1-5',
nowfun=est_timezone)
}
}

回溯

celery-beat_1  | [2021-04-12 07:44:58,058: CRITICAL/MainProcess] beat raised exception <class 'AttributeError'>: AttributeError("module 'datetime' has no attribute 'now'")
celery-beat_1  | Traceback (most recent call last):
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/kombu/utils/objects.py", line 41, in __get__
celery-beat_1  |     return obj.__dict__[self.__name__]
celery-beat_1  | KeyError: 'scheduler'
celery-beat_1  |
celery-beat_1  | During handling of the above exception, another exception occurred:
celery-beat_1  |
celery-beat_1  | Traceback (most recent call last):
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/apps/beat.py", line 105, in start_scheduler
celery-beat_1  |     service.start()
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 618, in start
celery-beat_1  |     humanize_seconds(self.scheduler.max_interval))
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/kombu/utils/objects.py", line 43, in __get__
celery-beat_1  |     value = obj.__dict__[self.__name__] = self.__get(obj)
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 662, in scheduler
celery-beat_1  |     return self.get_scheduler()
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 657, in get_scheduler
celery-beat_1  |     lazy=lazy,
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 497, in __init__
celery-beat_1  |     Scheduler.__init__(self, *args, **kwargs)
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 253, in __init__
celery-beat_1  |     self.setup_schedule()
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 540, in setup_schedule
celery-beat_1  |     self.merge_inplace(self.app.conf.beat_schedule)
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 450, in merge_inplace
celery-beat_1  |     entry = self.Entry(**dict(b[key], name=key, app=self.app))
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 124, in __init__
celery-beat_1  |     self.last_run_at = last_run_at or self.default_now()
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 128, in default_now
celery-beat_1  |     return self.schedule.now() if self.schedule else self.app.now()
celery-beat_1  |   File "/usr/local/lib/python3.7/site-packages/celery/schedules.py", line 67, in now
celery-beat_1  |     return (self.nowfun or self.app.now)()
celery-beat_1  |   File "/app/app/settings/common.py", line 146, in est_timezone
celery-beat_1  |     return datetime.now(pytz.timezon('EST'))
celery-beat_1  | AttributeError: module 'datetime' has no attribute 'now'
celery-beat_1  | [2021-04-12 07:44:58,059: WARNING/MainProcess] Traceback (most recent call last):
celery-beat_1  | [2021-04-12 07:44:58,059: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/kombu/utils/objects.py", line 41, in __get__
celery-beat_1  | [2021-04-12 07:44:58,059: WARNING/MainProcess] return obj.__dict__[self.__name__]
celery-beat_1  | [2021-04-12 07:44:58,059: WARNING/MainProcess] KeyError
celery-beat_1  | [2021-04-12 07:44:58,059: WARNING/MainProcess] :
celery-beat_1  | [2021-04-12 07:44:58,059: WARNING/MainProcess] 'scheduler'
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] During handling of the above exception, another exception occurred:
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] Traceback (most recent call last):
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] File "/usr/local/bin/celery", line 8, in <module>
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] sys.exit(main())
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/__main__.py", line 15, in main
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] sys.exit(_main())
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 213, in main
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] return celery(auto_envvar_prefix="CELERY")
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/click/core.py", line 829, in __call__
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] return self.main(*args, **kwargs)
celery-beat_1  | [2021-04-12 07:44:58,060: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/click/core.py", line 782, in main
celery-beat_1  | [2021-04-12 07:44:58,061: WARNING/MainProcess] rv = self.invoke(ctx)
celery-beat_1  | [2021-04-12 07:44:58,061: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
celery-beat_1  | [2021-04-12 07:44:58,061: WARNING/MainProcess] return _process_result(sub_ctx.command.invoke(sub_ctx))
celery-beat_1  | [2021-04-12 07:44:58,061: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
celery-beat_1  | [2021-04-12 07:44:58,061: WARNING/MainProcess] return ctx.invoke(self.callback, **ctx.params)
celery-beat_1  | [2021-04-12 07:44:58,061: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/click/core.py", line 610, in invoke
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] return callback(*args, **kwargs)
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/click/decorators.py", line 21, in new_func
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] return f(get_current_context(), *args, **kwargs)
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 132, in caller
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] return f(ctx, *args, **kwargs)
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/bin/beat.py", line 72, in beat
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] return beat().run()
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/apps/beat.py", line 77, in run
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] self.start_scheduler()
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/apps/beat.py", line 105, in start_scheduler
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] service.start()
celery-beat_1  | [2021-04-12 07:44:58,062: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 618, in start
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] humanize_seconds(self.scheduler.max_interval))
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/kombu/utils/objects.py", line 43, in __get__
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] value = obj.__dict__[self.__name__] = self.__get(obj)
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 662, in scheduler
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] return self.get_scheduler()
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 657, in get_scheduler
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] lazy=lazy,
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 497, in __init__
celery-beat_1  | [2021-04-12 07:44:58,063: WARNING/MainProcess] Scheduler.__init__(self, *args, **kwargs)
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 253, in __init__
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] self.setup_schedule()
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 540, in setup_schedule
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] self.merge_inplace(self.app.conf.beat_schedule)
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 450, in merge_inplace
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] entry = self.Entry(**dict(b[key], name=key, app=self.app))
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 124, in __init__
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] self.last_run_at = last_run_at or self.default_now()
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/beat.py", line 128, in default_now
celery-beat_1  | [2021-04-12 07:44:58,064: WARNING/MainProcess] return self.schedule.now() if self.schedule else self.app.now()
celery-beat_1  | [2021-04-12 07:44:58,065: WARNING/MainProcess] File "/usr/local/lib/python3.7/site-packages/celery/schedules.py", line 67, in now
celery-beat_1  | [2021-04-12 07:44:58,065: WARNING/MainProcess] return (self.nowfun or self.app.now)()
celery-beat_1  | [2021-04-12 07:44:58,065: WARNING/MainProcess] File "/app/app/settings/common.py", line 146, in est_timezone
celery-beat_1  | [2021-04-12 07:44:58,065: WARNING/MainProcess] return datetime.now(pytz.timezon('EST'))
celery-beat_1  | [2021-04-12 07:44:58,065: WARNING/MainProcess] AttributeError
celery-beat_1  | [2021-04-12 07:44:58,065: WARNING/MainProcess] :
celery-beat_1  | [2021-04-12 07:44:58,065: WARNING/MainProcess] module 'datetime' has no attribute 'now'

如果您查看了Celery的文档,那么在传递日期时间对象时,nowfun期望有一个可调用的函数。芹菜文档

nowfun(可调用(–函数返回当前日期和时间作为类:~datetime.datetime.

因此,在这种情况下,您可以简单地将est_timezone更改为一个函数:

def est_timezone():
return datetime.now(pytz.timezone('EST'))

您的日程安排crontab将保持不变。

最新更新