我有一个芹菜任务函数,它将属性作为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())
答案 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
代替。