将 Psyco 混入我的项目都有哪些风险(如果有)?
Posted
技术标签:
【中文标题】将 Psyco 混入我的项目都有哪些风险(如果有)?【英文标题】:What are the risks (if any) of mixing Psyco into my project?将 Psyco 混入我的项目有哪些风险(如果有)? 【发布时间】:2009-09-17 08:11:55 【问题描述】:我在一个大型金融定价应用程序中工作,其中进行了一些长期运行的计算。我们已经确定了一些可以通过选择性应用 psyco 来加速的功能。我的管理层要求评估将 psyco 添加到我们的堆栈中的成本和收益。
鉴于我的项目的关键性质,如果“性能增强”可能会降低可靠性,这是不可接受的。我读过使用 psyco 以使用更多内存为代价获得额外的性能。我担心这可能是个问题。
我是这样做的:
@psyco.proxy
def my_slow_function(xxx):
总而言之,我们希望将 psyco 应用于不超过 15 个函数 - 这些函数的使用率非常高。这个库中有数千个函数,所以这只会影响我们代码的一小部分。所有的功能都是小的、数学的和无状态的。
这是否存在使用大量内存的风险 在将这个组件添加到我们长期建立的库中时,我们可能会遇到任何其他问题吗?仅供参考,平台是 Windows 32 位 XP 上的 Python 2.4.4
更新:似乎主要的潜在风险是由于程序需要比添加 psyco 之前更多的内存来运行,所以理想情况下,我想找到一种方法来查看添加 psyco 是否会显着改变系统。
【问题讨论】:
【参考方案1】:为什么不尝试分析它? Psyco 有一个非常详细的logging 设施:
内存使用量:x+ kb
Psyco 目前关于发出的机器代码和支持数据结构消耗多少内存的概念。这是对内存开销的粗略估计(+ 号应该提醒您这个数字被高度低估了)。使用此信息来调整内存限制(第 3.2.2 节)。
还要注意memory usage is configurable:
最大内存
当 Psyco 消耗的内存达到限制(以千字节为单位)时停止。此限制包括在此探查器启动之前消耗的内存。
【讨论】:
psyco 使用更多内存的原因是什么?是它在内存中创建了原始函数对象的副本(可能是相当小的东西),还是函数需要更多的内存来执行。 我相信在专业化处理步骤发生之前需要收集的主要是运行时信息的开销。这在 Python 这样的高级语言中是必要的,因为每个操作都高度依赖于运行时上下文。这在 Psyco PEPM '04 论文中有详细讨论:psyco.sourceforge.net/doc.html 顺便说一句,这个问题与您更普遍的担忧有关:***.com/questions/575385/… @Salim Fadhley:我认为您的评论很有趣,可以作为一个单独的更一般的问题提出:***.com/questions/1438220/…【参考方案2】:Psyco 是一个 JIT 编译器。如果你的函数是无状态的,那么除了更多的内存之外应该几乎没有缺点。
【讨论】:
我们可以开始量化它预计会使用多少内存吗?例如,它会使用我们两倍的内存、数百倍的内存吗?以上是关于将 Psyco 混入我的项目都有哪些风险(如果有)?的主要内容,如果未能解决你的问题,请参考以下文章
将 Access-Control-Request-Headers 设置为 * 都有哪些安全风险? [复制]