有人向我抱怨蟒蛇太慢了,然后我教他蟒蛇行如飞的六技,他看得目瞪口呆。你也想知道这个秘密吗?让我告诉你:Python是一门优秀的语言,可以让你在短时间内用极少的代码完成很多操作。不仅如此,它还轻松支持多任务处理,比如multiprocessing。因为GIL的存在,Python很难充分利用多核CPU的优势。但是,通过内置模块multiprocessing可以实现以下并行模式:多进程并行编程对于CPU密集型程序,可以使用multiprocessing的Process、Pool等封装类,通过多进程实现并行计算。但是由于进程中的通信成本比较高,对于需要进程间进行大量数据交互的程序来说,效率可能不会有太大的提升。多线程并行编程对于IO密集型程序,multiprocessing.dummy模块使用multiprocessing接口封装线程,使得多线程编程变得非常容易(比如可以使用Pool的map接口,简洁高效).Distributed:multiprocessing中的Managers类提供了一种在不同进程之间共享数据的方式,可以在此基础上开发分布式程序。不同的业务场景可以选择一种或几种组合来优化程序性能。优化算法时间法的时间复杂度对程序的执行效率有很大的影响。在Python中,可以通过选择合适的数据结构来优化时间复杂度。比如在list和set中查找某个元素的时间复杂度分别是O(n)和O(1)。不同的场景有不同的优化方式。一般来说,一般有分治法、分支定界法、贪心法、动态规划等思想。例如:set的用法set的并、交、差运算比list的迭代快。因此,如果涉及求列表的交、并、差,可以转化为集合运算。循环优化每种编程语言都强调优化循环的必要性。使用Python时,您可以依靠许多技巧来使循环运行得更快。但是,开发人员经常忽略的一个技巧是避免在循环中使用点操作。例如,考虑以下代码:每次调用方法str.upper时,Python都会对该方法求值。但是,如果您用一个变量代替评估值,该值就会已知,Python可以更快地执行任务。优化循环的关键是减少Python在循环内所做的工作量,因为在这种情况下,Python的本机解释器确实会减慢执行速度。函数在循环时选择使用xrange而不是range;使用xrange可以节省大量系统内存,因为xrange()在序列中每次调用只产生一个整数元素。虽然range()会直接返回完整的元素列表,但是用于循环时会有不必要的开销。在python3中,xrange已经不存在了,range提供了一个可以遍历任意长度范围的迭代器。除了上面ipython中使用的timeit模块和cProfile之外,还要使用性能分析工具。cProfile的使用也很简单:python–mcProfilefilename.py,filename.py是要运行的程序的文件名,可以在标准输出中看到每个函数被调用的次数和运行时间,从而找到程序的性能瓶颈,进而有针对性地进行优化。
