【原创】Python 之快速性能优化(第二部分)

本文为翻译,原文地址:《 Quick Python Performance Optimization: Part II  

This is the Part II of Quick Python Performance Optimizations. 
本文是 Python 性能优化二两发的第二部分。 

11. Use MapReduce and Filter instead of for loop where ever possible. 
11. 尽可能使用 Map,Reduce 和 Filter 替代 for 循环。 

12. for checking 'a in b', dict or set is better than list/tuple. 
12. 针对 'a in b' 的测试,b 是字典或者集合要好于是列表/元组的情况。 

13. while working with big amount of data, if possible use immutable datatypes, they are faster - tuples > list 
13. 当针对大块数据进行操作时,在可能的情况下,使用不可变数据类型更好,因为它们会更快相应操作 - 元组 > 列表。 

14. insertion into a list in O(n) complexity. 
14. 向列表插入数据是 O(n) 复杂度的操作。 

15. if you need manipulations on both ends of a list, use deque. 
15. 如果你需要对列表的头和尾都进行操作,请使用 deque 。 

16. del - delete the objects after use - 
  • Python does it by itself. But make sure of that with the gc module or 
  • by writing an __del__ magic function or 
  • the simplest way, del after use.
16. del - 在对象使用结束后进行删除 -  
  • Python 自己会进行该操作。但是请确认 gc 模块处于正常工作状态,或
  • 自己写一个 __del__ magic 函数,或
  • 最简单的方式,自己在用后自己删除。
17. time.clock() 
17. 使用 time.clock() 。 

18. GIL(http://wiki.python.org/moin/GlobalInterpreterLock) - GIL is a demon.  
GIL allows only one python native thread to be run per process, preventing CPU level parallelism. Try using ctypes and native C libararies to overcome this. When even you reach the end of optimizing with python, always there exist an option of rewriting terribly slow functions in native C, and using it through python C bindings. Other libraries like gevent is also attacking the problem, and is successful to some extend.  
18. GIL - GIL 是一个恶魔   
GIL 只允许在每个进程里运行一个 python 本地线程,阻止了 CPU 级别的并发。可以使用 ctypes 和纯 C 库来解决这个问题。就算到了优化 python 代码的最后阶段,仍旧可以通过使用纯 C 重写慢速 python 函数来进行优化。或者干脆直接使用 python 的 C 绑定。其他的库,如 gevent,同样也针对此问题进行了优化,从某种角度上来说还是不错的。 

TL,DR: While you write code, just give one round of thought on the data structures, the iteration constructs, builtins and create C extensions for tricking the GIL if need. 
TL,DR: 当你写代码的时候,可以在数据结构、迭代的构建、内置函数上多进行一些考量 ,并在必要时,创建一些 C 扩展来克服 GIL 带来的问题。 

上一篇:Mysql 大数据量导入程序


下一篇:IJCAI 2019 | 为了有效整合多类信息,阿里文娱提出多视图多标记算法SIMM