本文主要是整理看过的不错的文章,具体内容请参考对应链接
1、内存
__slots__使得不用为每个实例分配一个__dict__,对于数量巨多的小对象内存优化显著(降到1/4)
使用cython, 小对象降到使用__slots__的1/2不是问题,参见:
http://cython.readthedocs.io/en/latest/src/reference/extension_types.html
2、速度
各种小的注意事项:
https://wiki.python.org/moin/PythonSpeed/PerformanceTips
- 循环外c=time.time; 循环内用 c() 替代带点的操作 time.time()
- 将import写在需要多次调用的函数外面,尤其是函数很简短时
知乎上的讨论numba等:
https://www.zhihu.com/question/24695645
通过Python-C-Api,Ctypes,swig或cython等调用c实现(很不错的文章):
https://segmentfault.com/a/1190000000479951
3、cython相关资料
注意:pydev代码提示,对于编译后的动态链接库,需要在Forced Builtins手动添加.so的变量名(对于openCV为cv2,对于自己的模块,比如LC.moduleA.so, 需要添加LC.moduleA)
http://www.pydev.org/manual_101_interpreter.html
很赞的第三方(numpy,直接操作numpy的指针等)
示例:
http://notes-on-cython.readthedocs.io/en/latest/std_dev.html
cython官网的一些文档:
入门(很简单):
http://cython.readthedocs.io/en/latest/src/quickstart/build.html
类:
http://cython.readthedocs.io/en/latest/src/reference/extension_types.html
str相关(注意在cython的class中是可以通过cdef 定义python中的类型的,比如str):
http://cython.readthedocs.io/en/latest/src/tutorial/strings.html
使用openMP:
http://cython.readthedocs.io/en/latest/src/userguide/parallelism.html?highlight=loop
cython结合numpy:
http://cython.readthedocs.io/en/latest/src/tutorial/numpy.html
Typed Memoryviews(新的传递numpy数组的方式,更清晰,但速度稍慢):
http://cython.readthedocs.io/en/latest/src/userguide/memoryviews.html
编译选项(string的转换策略,是否启用boundscheck等):
http://cython.readthedocs.io/en/latest/src/reference/compilation.html#compiler-directives
增量编程(主代码在py文件中, 可以转为c的定义在pyx文件中):
http://cython.readthedocs.io/en/latest/src/tutorial/memory_allocation.html
代码效率分析:
cython -a --cplus code.pyx #无需指定额外cpp和h文件路径
参考自:
https://zhuanlan.zhihu.com/p/24311879
4、 多线程,多进程
对比测试,GIL知识参见:
http://stackoverflow.com/questions/10154487/how-to-get-a-faster-speed-when-using-multi-threading-in-python
多进程: 可以多核并行执行,但是参数是通过序列化和反序列化在进程间传递的,因而,多进程适用于输入,输出参数都很小,但是采用纯python代码进行大量运算的情况
多线程: 由于GIL(Global Interpreter Lock)的存在,只适用于IO密集型程序(不受GIL限制的扩展程序除外,比如在cython中使用nogil);CPU密集型程序反而会导致性能下降(都需要python解释器进行解释,但只有获得GIL的线程才能够执行)。。。
心得: 先启动无需GIL的线程,再启动需要GIL的线程
需要两个线程,一个是第三方GPU程序,耗时较长,另一个是python程序,耗时稍短,如果一个在主线程中执行,一个通过Thread在另外的线程中执行,将哪一个放在新的线程中? 答案是GPU程序,因为如果将python程序放在另外一个线程中,就需要先启动该线程,该线程释放GIL需要一定的时间,会导致GPU程序的启动时间滞后。 即使这两个程序都放在新的线程中执行,也必须先启动GPU程序,因为GPU程序会立即释放GIL,而python程序会先运行一段时间再释放GIL,只有释放了GIL,主线程中启动GPU程序的命令才会被执行
5、编码问题
关于python2为什么不推荐使用
sys.setdefaultencoding("utf-8"):
http://stackoverflow.com/questions/3828723/why-should-we-not-use-sys-setdefaultencodingutf-8-in-a-py-script
个人觉着只要能解决问题就行,毕竟python3默认就是utf-8了
分享到:
相关推荐
在07.04-python-Cython 语法,调用其他C库.ipynb文件中,你可能会看到如何使用`ctypes`或者CFFI(Foreign Function Interface)来导入C函数,并在Cython代码中直接调用。这样,你可以利用已有的C库优化Python代码,...
综上所述,Python程序优化涉及代码结构、数据结构选择、函数式编程、C扩展、算法优化、资源管理、并发处理等多个方面。通过深入理解和实践这些技巧,我们可以编写出既简洁又高效的Python代码。这份"Python中的程序...
Cython的基本思想是,它允许开发者用接近Python的语法编写代码,但通过类型声明和优化,能够生成高效的C源代码,进一步编译为C扩展模块。这样,你可以充分利用Python的便利性,同时享受到接近C的速度。 在“07.02-...
10. **性能优化**:Python源码还包含了一些用于性能优化的技巧,例如对内置类型的操作进行了专门的优化,以及如何使用Cython或PyPy等工具提升Python代码的运行速度。 总的来说,"Python源码学习笔记"可能会涵盖以上...
7. 粘性扩展:Python可以与其他语言编写的代码集成,利用Cython或SWIG等工具进行扩展。 8. 开源理念:Python是开放源代码的,拥有庞大的社区支持和丰富的库资源。 9. 库类丰富:Python有众多预封装的库,如NumPy、...
- **其他语言集成**: 通过Cython等工具将Python与C/C++代码集成起来。 ### 结语 《Python核心笔记》不仅涵盖了Python语言的核心内容,还介绍了如何使用Python开发各种类型的应用程序。无论是初学者还是经验丰富的...
Python基础笔记总结 Python 是一种动态类型的解释型语言,具有以下特点: 1. Python 解释器本身几乎可以在所有的操作系统中运行。 2. Python 本身设计为可扩展的,并非所有的特性和功能都集成到语言核心之中。 3. ...
5. **科学计算库**:Python拥有一系列高质量的科学计算库,包括NumPy和SciPy用于数值运算,Cython用于底层优化,IPython提供交互式工作环境,以及Matplotlib用于数据可视化。 6. **文档与社区支持**:Python拥有...
这是Python封装,其中使用了2005年IEEE进化计算大会大型全局优化特别会议的测试套件的C ++实现。 笔记 如果要使用此代码的任何部分,请引用以下出版物: Suganthan,N。Hansen,JJ Liang,K。Deb,Y.-P. Chen,A。...
8. **性能优化**:了解Python的GIL(全局解释器锁)限制,以及如何使用Cython、Numba等工具进行性能提升。 9. **并发和异步**:Python的多线程、多进程以及asyncio库提供了并发和异步编程的能力。 10. **文件I/O**...
12. **扩展与C语言接口**:当需要提高性能时,可以通过ctypes库调用C语言编写的库,或者使用Cython等工具将Python代码编译为C扩展。 13. **持续集成与自动化测试**:理解如何使用unittest或pytest进行单元测试,...
12. **性能优化**:了解Python的性能瓶颈,如何使用cProfile进行性能分析,以及可能的优化策略,如使用cython进行C扩展,或者使用NumPy和Pandas等高性能库。 以上只是一部分可能包含的内容,实际的HTML文档可能会更...
有数百种Python科学软件包,其中大多数构建在numpy,scipy,matplotib,pandas,cython和/或sympy之上。 我们不会在此短期课程中介绍所有内容,但是您应该获得足够的信息来决定您的研究是否可以从Python中受益。 我...
使用python setup.py install从源代码python setup.py install ,如果安装了Cython,则setup.py将尝试构建经过Cython优化的模块creedsolo.pyx 。 您可以通过键入以下内容来覆盖此行为: python setup.py install --...
利用Cython的流行软件包和库包括:TensorFlow,OpenCV,NumPy,Pandas等。 该网络研讨会将介绍Cython的基本介绍,这是将香草Python转换为Cython的演示,然后是有关如何在我们自己的Compute Canada HPC环境中运行...
纯Python中(),然后通过Cython或Numba作为优化的Python代码。 我还用编写了一个版本(在同一笔记本中),并比较了4种实现! 然后,我将代码发布为Pypy包,请参见 。 几个(包括著名的梅森扭曲器算法)的( ),...
matlab如何敲代码适用于高性能数值处理的Python / Numpy 用于2018年11月15日举行的笔记本和幻灯片。 抽象的 Python是众所周知的慢速语言,为什么它被科学家和机器学习专家广泛使用? 在繁重的数字任务中,一种解释后...
用Python编写的自回归条件异方差(ARCH)和其他用于金融计量经济学的工具(使用Cython和/或Numba来提高性能) 公制 最新发布的 持续集成 覆盖范围 代码质量 引文 文献资料 模块内容 Python 3 arch仅适用于...
`requirements.txt`文件列出了Caffe所依赖的Python库,如Cython、h5py、matplotlib等。手动安装这些库可以通过运行`sudo pip install <library_name>`命令完成。`ipython`和`ipython notebook`是用于交互式编程和...