psyco似乎在优化Python代码方面非常有用,它以非侵入性的方式实现.
因此,人们不得不怀疑.假设你总是在x86架构上(这是大多数应用程序运行的地方),为什么不总是使用psyco
所有Python代码呢?它有时会出错并破坏程序的正确性吗?增加一些奇怪案例的运行时间?
你有任何负面经历吗?到目前为止,我最负面的经验是它使我的代码速度提高了15%.通常它会更好.
当然,使用psyco并不能替代有效的算法和编码.但是,如果您可以通过两行(导入和调用psyco)的成本来提高代码的性能,我认为没有充分的理由不这样做.
我刚刚阅读了第3版学习Python(2007年末)中关于执行模型的部分,感觉相当试探性.所以,我看了第4版(2009年末)的同一部分,并且非常失望,它完全没有变化.
在CPython之外执行Python的状态是什么?感觉Jython和IronPython仍然是利基项目; 有其他类似的项目出现?Psyco凝固得很好,无需担心吗?有很多人使用ShedSkin?是否有关于何时PyPy执行速度更快的信息?
Psyco的文档说:
仅供参考,Psyco根本不适用于任何64位系统.这个事实值得再次注意,现在最新的Mac OS/X 10.6"Snow Leopart"带有64位机器上的64位默认Python.在OS/X 10.6上使用Psyco的唯一方法是在32位模式下重新编译自定义Python.
通常,当代码假定指针类型和其他类似的小(ish)问题具有特定大小时,将程序从32位移植到64位只是一个问题.考虑到Psyco不是很多代码(大约32K行的C + ~8K系列的Python),它有多难?有没有人试过这个并撞墙?我还没有机会好好看看Psyco的来源,所以我真的很感激知道我是否在浪费时间研究这个......
我在使用python 2.6.1运行Snow Leopard的Macbook pro上安装psyco时遇到了一些麻烦.
我一直在尝试使用该命令强制python以32位模式运行
defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
Run Code Online (Sandbox Code Playgroud)
此外,我尝试过Macport py26-psyco,它似乎已经完成,但在编译时无法找到模块.
$ sudo python setup.py install
PROCESSOR ='ivm'
运行安装
正在运行build
运行build_py
运行build_ext
构建'psyco._psyco'扩展
gcc-4.2 -fno-strict-aliasing -fno-common -dynamic -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch ppc -arch x86_64 -pipe -DALL_STATIC = 1 -Ic/ivm -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 - cc/psyco.c -o build/temp.macosx-10.6-universal-2.6/c/psyco.o
在c/initialize.h:48中包含的文件中,
来自c/psyco.c:14:
c/psyfunc.c :在函数'psycofunction_call':
C/psyfunc.c:801:警告:从兼容的指针类型传递参数2 'PyDict_Next'的
在文件中包含从C/initialize.h:49,
从C/psyco.c:14:
ç /stats.c:在函数'psyco_stats_reset'中:
c/stats.c:260:警告:从不兼容的指针类型
c/stats.c 传递'PyDict_Next'的参数2 :在函数'psyco_stats_dump'中:
c/stats.c: 298:警告:从不兼容的指针类型
c/sta 传递'PyDict_Next'的参数2 ts.c:在函数'psyco_stats_top':
C/stats.c:326:警告:从兼容的指针类型传递参数2 'PyDict_Next'的
在文件中包含从C/initialize.h:75,
从C/psyco.c: 14:
C /对象/ pstructmember.c:在函数'PsycoMember_GetOne':
C …
Psyco可以并且将使用大量内存.
这种内存使用的主要原因是什么?大量内存开销一般是JIT编译器的一个特性吗?
编辑:感谢您的答案到目前为止.有三种可能的竞争者.
问题是,哪一个是内存使用的主导因素?我有自己的看法.但我正在增加赏金,因为我想接受实际上正确的答案!如果有人能证明或证明大部分内存的使用位置,我会接受它.否则,社区投票的任何人都将在赏金结束时自动接受.