将Psyco混合到我的项目中有哪些风险(如果有的话)?
我工作在一个大型的财务定价应用程序,其中一些长期运行的计算。我们已经确定了一些可以通过选择性应用psyco来加速的功能。我的管理层要求评估将psyco添加到我们的堆栈中的成本&。将Psyco混合到我的项目中有哪些风险(如果有的话)?
鉴于我的项目的关键性质,如果“性能增强”可能会降低可靠性,这是不可接受的。我读过使用psyco获得额外性能的代价是使用更多的内存。我担心这可能是一个问题。
我做这样的:
@psyco.proxy
def my_slow_function(xxx):
总之,我们希望申请到Psyco的不超过15个功能 - 这是非常频繁使用。这个库有数千个函数,所以这只影响我们代码的一小部分。所有的功能都很小,数学和无状态。
- 有可能是,这将大幅使用更多的内存
- 是否有添加这个组件到我们长期建立的库时,我们可能遇到的任何其他问题的风险?
仅供参考,平台的Python 2.4.4在Windows 32位XP
更新:看来,主要的潜在风险是由于需要更多的内存比加入前Psyco的运行程序,所以我的理想想找到一种方法来看看添加psyco是否会显着改变系统的内存需求。
为什么不尝试分析它? Psyco是有一个非常详细的logging设施:
内存使用:X + KB
Psyco是目前的多少内存概念消耗的发射机代码和支持数据结构。这是对内存开销的一种估计(+符号应该提醒你,这个数字被高估了)。使用此信息调整内存限制(第3.2.2节)。
还要注意memory usage is configurable:
memorymax
停止时Psyco是消耗的内存达到限制(以KB为单位)。此限制包括在启动分析器之前消耗的内存。
Psyco是一个JIT编译器。如果你的函数是无状态的,那么除了更多的内存之外,几乎不应该退缩。
我们可以开始量化它预计使用多少内存吗?例如,它会使用两倍的内存,数百倍的内存? – 2009-09-17 08:47:15
谢谢,很好的回答 – 2009-09-17 09:41:17
psyco是什么使它使用更多的内存?它是否在内存中创建了原始函数对象的副本(这大概是很小的东西),还是这些函数需要更多的内存来执行。 – 2009-09-17 09:42:31
我认为这主要是运行时信息的开销,需要在专业化处理步骤发生之前收集。这在像Python这样的高级语言中是必需的,因为每个操作都可能高度依赖于运行时上下文。这在Psyco PEPM'04论文中有详细讨论:http://psyco.sourceforge.net/doc.html – 2009-09-17 11:04:51