如何在芹菜中反序列化日期时间字符串?

时间:2018-02-15 16:22:56

标签: python celery

我有一个芹菜任务函数,它将属性作为datetime对象。然而,在芹菜任务中,这个对象是一个字符串。我想这是序列化工作。

如何在另一端执行反序列化?我是否必须自己处理它,或者是否有更优雅的方式来制作芹菜中的内容?

# tasks.py
@shared_task
def my_func(start_time, end_time):
  print(type(start_time)) # unicode, need datetime


# calling file
my_func.delay(datetime.now()-timedelta(hours=1), datetime.now())

1 个答案:

答案 0 :(得分:1)

您可以尝试使用其他序列化程序。您可能使用默认的json序列化程序,这意味着日期时间必须表示为字符串。其他受支持的序列化程序应该能够处理日期时间。

http://docs.celeryproject.org/en/latest/userguide/calling.html#serializers

# calling file
my_func.apply_async(
    args=[datetime.now()-timedelta(hours=1), datetime.now()], 
    serializer='pickle',  # or 'yaml' or 'msgpack' 
)

如果我们想要传递执行选项,我们就无法使用芹菜快捷函数delay,因此我们使用底层的apply_async代替。