【问题标题】:Django caching - Pickle is slowDjango 缓存 - Pickle 很慢
【发布时间】:2013-05-13 17:41:16
【问题描述】:

在优化一个网站时,我发现,QuerySets 的酸洗最终成为缓存的瓶颈,无论你的代码多么聪明,在 1-2 秒的时间内解开相对较大的 QS 将扼杀所有的努力.
有人遇到过这个吗?

【问题讨论】:

    标签: python django caching serialization pickle


    【解决方案1】:

    如果您目前只使用pickle,我可以推荐cPickle,据称它的速度最高可达1000 倍。

    【讨论】:

    • 在这种情况下,您可能会考虑Marshall,因为它更快,但正如文档所说,它不能防止错误或恶意数据。
    • @GillBates:如果您使用 cPickle 并且仍然观察到这些 1-2 秒的 unpickling,那么这些查询集似乎一定非常庞大。他们多大?你真的需要缓存所有的数据吗?
    • @Tadgh 根据 Marshall 上的文档,至少在 python 3.8 中,这是不正确的。直接取自文档...use the pickle module instead – the performance is comparable...
    【解决方案2】:

    ultrajson 来救援!

    In [1]: from string import letters
    
    In [3]: import ujson
    
    In [5]: import cPickle as pickle
    
    In [7]: import random
    
    In [8]: def random_string(n=10): return ''.join([random.choice(letters) for _ in xrange(n)])
    
    In [9]: DATA = {random_string(): list(range(1000)) for _ in xrange(1000)}
    
    In [12]: %timeit -r 3 -n 100 ujson.dumps(DATA)
    100 loops, best of 3: 89.2
    
    In [13]: %timeit -r 3 -n 100 pickle.dumps(DATA)
    100 loops, best of 3: 285 ms per loop
    

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2017-07-14
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 2021-10-22
      相关资源
      最近更新 更多