(2018-05-22.Python从Zero到One)6、(爬虫)scrapy-Redis分布式组件__1.6.3源码分析参考:Picklecompat

picklecompat.py

"""A pickle wrapper module with protocol=-1 by default."""

try:
    import cPickle as pickle  # PY2
except ImportError:
    import pickle


def loads(s):
    return pickle.loads(s)


def dumps(obj):
    return pickle.dumps(obj, protocol=-1)

这里实现了loads和dumps两个函数,其实就是实现了一个序列化器。

因为redis数据库不能存储复杂对象(key部分只能是字符串,value部分只能是字符串,字符串列表,字符串集合和hash),所以我们存啥都要先串行化成文本才行。

这里使用的就是python的pickle模块,一个兼容py2和py3的串行化工具。这个serializer主要用于一会的scheduler存reuqest对象。

你可能感兴趣的:((2018-05-22.Python从Zero到One)6、(爬虫)scrapy-Redis分布式组件__1.6.3源码分析参考:Picklecompat)