在使用消息中间件时,一个棘手的问题就是如何把python对象传递给中间件。
每个编程语言的对象在内存中的排列方式都是不同的,想让它们之间相互交流,就必须有个统一的格式。
将内存中的对象,转换成统一格式的过程就是序列化。
json是各组件之间交互信息的格式之一。
python中常规的变量都能够很方便的序列化为json. 但如果要序列化的是函数,事情就没那么简单了。
那么怎么将函数转化为json呢?
一般的 json.dumps()
无法转换函数,这时候我们需要用一个更强大的序列化工具——pickle
。
具体思路为
- 利用
pickle
将 函数foo
序列化为字节对象。 - 利用
base64.b64encode
将字节对象转换为Base64 编码的字节码。 - 利用
.decode('ascii')
将字节码转换为字符串。
综上,我们用
base64.b64encode(pickle.dumps(foo)).decode('ascii')
实现了将 函数foo
转化为字符串,进而可以使用json来表示。