- 这里有些晚,但是您应该能够通过在kombu序列化程序注册表中注册自定义编码器和解码器,如docs中所示:http
- [//docs.celeryproject.org/en/latest/userguide/calling.html
serializers](http://docs.celeryproject.org/en/latest/userguide/calling.html#serializers)。
例如,以下是Django
的自定义日期时间序列化器/反序列化器(子类化python的内置json模块):
myjson.py (将其放入您的settings.py文件的同一文件夹中)
import jsonfrom datetime import datetimefrom time import mktimeclass MyEnprer(json.JSONEnprer): def default(self, obj): if isinstance(obj, datetime): return { '__type__': '__datetime__', 'epoch': int(mktime(obj.timetuple())) } else: return json.JSONEnprer.default(self, obj)def my_deprer(obj): if '__type__' in obj: if obj['__type__'] == '__datetime__': return datetime.fromtimestamp(obj['epoch']) return obj# Enprer function def my_dumps(obj): return json.dumps(obj, cls=MyEnprer)# Deprer functiondef my_loads(obj): return json.loads(obj, object_hook=my_deprer)settings.py
# Register your new serializer methods into kombufrom kombu.serialization import registerfrom .myjson import my_dumps, my_loadsregister('myjson', my_dumps, my_loads, content_type='application/x-myjson', content_encoding='utf-8')# Tell celery to use your new serializer:CELERY_ACCEPT_ConTENT = ['myjson']CELERY_TASK_SERIALIZER = 'myjson'CELERY_RESULT_SERIALIZER = 'myjson'


