1. # -*- coding: utf-8 -*-
  2. # @Time : 2019-04-01 17:41
  3. # @Author : cxa
  4. # @File : dictest.py
  5. # @Software: PyCharm
  6. import time
  7. import pickle
  8. import marshal
  9. import ujson
  10. import msgpack
  11. def test(data, method):
  12. if method == 'pickle':
  13. dumps = pickle.dumps
  14. loads = pickle.loads
  15. elif method == 'marshal':
  16. dumps = marshal.dumps
  17. loads = marshal.loads
  18. elif method == 'ujson':
  19. dumps = ujson.dumps
  20. loads = ujson.loads
  21. elif method == "msgpack":
  22. dumps = msgpack.dumps
  23. loads = msgpack.loads
  24. b = time.time()
  25. s = ''
  26. loop = 10000
  27. for i in range(loop):
  28. s = dumps(data)
  29. print('{} dumps time cost: {}'.format(method, time.time() - b))
  30. b = time.time()
  31. for i in range(loop):
  32. loads(s)
  33. print('{} loads time cost: {}'.format(method, time.time() - b))
  34. def main():
  35. # generate test data
  36. data = {}
  37. count = 80
  38. for i in range(10000):
  39. k = '%05d' % (i % count)
  40. if k in data:
  41. data[k].append(i / count)
  42. else:
  43. data[k] = [i / count]
  44. print('data:', len(data))
  45. # test
  46. test(data, 'pickle')
  47. test(data, 'marshal')
  48. test(data, 'ujson')
  49. test(data, 'msgpack')
  50. if __name__ == '__main__':
  51. main()

结果

  1. pickle dumps time cost: 2.6049489974975586
  2. pickle loads time cost: 3.6289799213409424
  3. marshal dumps time cost: 2.2469120025634766
  4. marshal loads time cost: 2.907557964324951
  5. ujson dumps time cost: 8.108527183532715
  6. ujson loads time cost: 4.873885869979858
  7. msgpack dumps time cost: 2.671412944793701
  8. msgpack loads time cost: 3.2492690086364746

注意:

千万不要对不信任的数据使用pickle.load()。

pickle在加载时有一个副作用就是它会自动加载相应模块并构造实例对象。

但是某个坏人如果知道pickle的工作原理,

他就可以创建一个恶意的数据导致Python执行随意指定的系统命令。

因此,一定要保证pickle只在相互之间可以认证对方的解析器的内部使用。

python序列化模块的速度比较的更多相关文章

  1. python序列化模块 json&&pickle&&shelve

    #序列化模块 #what #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程叫做序列化. #why #序列化的目的 ##1.以某种存储形式使自定义对象持久化 ##2.将对象从一个地方传递 ...

  2. python序列化模块json和pickle

    序列化相关 1. json 应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转 ...

  3. python 序列化模块之 json 和 pickle

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,支持不同程序之间的数据转换.但是只能转换简单的类型如:(列表.字典.字符串. ...

  4. python序列化模块

    什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 序列化的目的 1.以某种存储形式使自定义对象持久化: 2.将对象从一个地方传递到另一个地方. 3.使程序更具维护性.   ...

  5. Python序列化模块pickle和json使用和区别

    这是用于序列化的两个模块: • json: 用于字符串和python数据类型间进行转换 • pickle: 用于python特有的类型和python的数据类型间进行转换 Json模块提供了四个功能:d ...

  6. Python 序列化模块(json,pickle,shelve)

    json模块 JSON (JavaScript Object Notation):是一个轻量级的数据交换格式模块,受javascript对象文本语法启发,但不属于JavaScript的子集. 常用方法 ...

  7. Python——序列化模块

    #json 模式 1.dumps.loads  方法 针对内存 dic = {'k1':'v1'} #转换成json import json str_d = json.dumps(dic) #序列化 ...

  8. Python序列化模块-Pickel写入和读取文件

    利用pickle 存储和读取文件 1.存储文件: #引入所需包,将列表元素存入data2的文件里面 import pickle mylist2 ={'1','nihao','之后','我们',1,2, ...

  9. 铁乐学python_day25_序列化模块

    铁乐学python_day25_序列化模块 部份内容摘自博客http://www.cnblogs.com/Eva-J/ 回顾内置方法: __len__ len(obj)的结果依赖于obj.__len_ ...

随机推荐

  1. ByteBuffer详解

    注意:一定要了解这个缓冲类的几个方法和那几个字段.不然你不会明白的. 字段: position ,limit ,mark 方法:clear(), hasRemaining(),flip() 推荐博客: ...

  2. linux kill 命令【待完善】【转】

    kill 命令用来处理进程, 在linux中即可使用kill -9 pid 杀死进程 , 也可使用kill -KILL pid 等价的命令来执行. HUP 1 终端断线 INT 2 中断(同 Ctrl ...

  3. HDU 1088(文本处理 **)

    题意是对一段文本进行处理,如果读到 <br>,则换行:如果读到 <hr>,若当前行无字符,则输出 80 个 ’-‘ 并换行,否则在下一行输出 80 个 ’-‘ 再换行:如果一行 ...

  4. 跨域请求传递Cookie问题

    问题描述 前后端完全分离的项目,前端使用Vue + axios,后端使用SpringMVC,容器为Tomcat. 使用CORS协议解决跨域访问数据限制的问题,但是发现客户端的Ajax请求不会自动带上服 ...

  5. Kafka 简要使用说明

    Kafka 简要使用说明 参考文章 Kafka背景及架构介绍http://www.infoq.com/cn/articles/kafka-analysis-part-1 Apache kafka 工作 ...

  6. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

    在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { priva ...

  7. SQL Server进阶 SQL优化

    找到消耗内存最多的SQL SELECT mg.granted_memory_kb, mg.session_id, t.text, qp.query_plan FROM sys.dm_exec_quer ...

  8. Handy Collaborator :用于挖掘out-of-band类漏洞的Burp插件介绍

    本文我将介绍一个新的 Burp Suite插件Handy Collaborator.Burp Suite Collaborator是添加到Burp Suite的外部服务器,主要用于挖掘那些仅来自外部服 ...

  9. 【bzoj 3669】[Noi2014]魔法森林

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

  10. oracle 存储过程(包)的写法和执行

    --in 代表输入参数,out 代表输出参数create or replace procedure myproc(id in int, v_message out varchar2) is--定义临时 ...