如何在celery中使用自定义的timezone?
我需要在定义celery beat任务的时候,使用自定义的timezone时区。比如美东时间+7小时
nowfun = lambda: datetime.now(timezone('US/Eastern')) + timedelta(hours=7)
我的第一种实现方案:
nowfun = lambda: datetime.now(tz) + timedelta(hours=7)....
'schedule': crontab(minute='1', hour='1', day_of_week=[1, 2, 3, 4, 5], nowfun=nowfun),
但是这个会给我报错,信息如下
Can't pickle <function <lambda> at 0x7fb71c7424c0>: attribute lookup <lambda>
第二种方案:
def nowfun(): return datetime.now(timezone('US/Eastern')) + timedelta(hours=7)
....
'schedule': crontab(minute='1', hour='1', day_of_week=[1, 2, 3, 4, 5], nowfun=nowfun),
这个方案也会给我报错,信息如下
tzinfo argument must be None or of a tzinfo subclass, not type 'function'
请教各位大神,有什么解决方案不?
回答:
这个报错提示说的挺清楚的呀。
Can't pickle <function <lambda> at 0x7fb71c7424c0>: attribute lookup <lambda>
lambda表达式不能持久化。它需要的是数值,而不是函数。
tzinfo argument must be None or of a tzinfo subclass, not type 'function'
它需要的是None
或者tzinfo
的子类。
也就是 timezone.utc
或者 timezone(timedelta(hours=-5), 'EST')
这种。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
以上是 如何在celery中使用自定义的timezone? 的全部内容, 来源链接: utcz.com/p/938618.html