如何在celery中使用自定义的timezone?

如何在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

回到顶部