Python的动态特性如何与PyPy的内联函数能力进行互操作?

2024-10-01 19:28:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设您有一个像f这样的函数调用函数m.g

def f(x):
    return m.g(x, 2*x, x+1)

而且f被多次调用,因此PyPy-jit将它和inlines{}放入其中。如果以后,由于Python的“动态”特性,m.g被其他东西取代了,会不会立即丢弃旧的fJIT版本,或者仍然会意外调用它

此外,如果您的程序经常进行这些重新定义,那么丢弃的JIT版本会导致内存泄漏吗


Tags: 函数内存程序版本return定义def动态
2条回答

回答最后一个问题:“如果您的程序经常进行这些重新定义,那么丢弃的JIT版本会导致内存泄漏吗?”这是一个很好的问题,在某些情况下答案可能是肯定的。如果g是您刚刚用execeval创建的函数,那么可能会出现不好的情况,因此最终在此处调用的函数对象数量是无限的。这是一个我们过去曾想过要解决的问题,但从未有时间去解决。如果您正在经历类似于泄漏的情况,并且已经隔离了这部分代码,那么我想说的是,这正是您所担心的。在这种情况下,我建议给pypy写封邮件-dev@python.org或者访问irc.freenode.net上的#pypy来描述您的案例

你不应该担心什么。如果您所说的是执行错误的代码,那么这将是PyPy环境中的一个bug。那不太可能。另外,不要担心内存泄漏。即使有一个,它也不会构成足够的记忆,你会注意到或关心。您可能会受到某种内存错误的影响的唯一方法是,如果每次执行代码时更改该定义1000次。我怀疑这是真的

“过早优化是万恶之源”。也许你听过这句名言。我认为它也适用于处理将来可能发生但不太可能发生的问题。不要担心这些,除非你看到不良行为。我很怀疑你会。相信你的工具

相关问题 更多 >

    热门问题