2024-10-01 19:28:15 发布
网友
假设您有一个像f这样的函数调用函数m.g:
f
m.g
def f(x): return m.g(x, 2*x, x+1)
而且f被多次调用,因此PyPy-jit将它和inlines{}放入其中。如果以后,由于Python的“动态”特性,m.g被其他东西取代了,会不会立即丢弃旧的fJIT版本,或者仍然会意外调用它
此外,如果您的程序经常进行这些重新定义,那么丢弃的JIT版本会导致内存泄漏吗
回答最后一个问题:“如果您的程序经常进行这些重新定义,那么丢弃的JIT版本会导致内存泄漏吗?”这是一个很好的问题,在某些情况下答案可能是肯定的。如果g是您刚刚用exec或eval创建的函数,那么可能会出现不好的情况,因此最终在此处调用的函数对象数量是无限的。这是一个我们过去曾想过要解决的问题,但从未有时间去解决。如果您正在经历类似于泄漏的情况,并且已经隔离了这部分代码,那么我想说的是,这正是您所担心的。在这种情况下,我建议给pypy写封邮件-dev@python.org或者访问irc.freenode.net上的#pypy来描述您的案例
g
exec
eval
你不应该担心什么。如果您所说的是执行错误的代码,那么这将是PyPy环境中的一个bug。那不太可能。另外,不要担心内存泄漏。即使有一个,它也不会构成足够的记忆,你会注意到或关心。您可能会受到某种内存错误的影响的唯一方法是,如果每次执行代码时更改该定义1000次。我怀疑这是真的
“过早优化是万恶之源”。也许你听过这句名言。我认为它也适用于处理将来可能发生但不太可能发生的问题。不要担心这些,除非你看到不良行为。我很怀疑你会。相信你的工具
回答最后一个问题:“如果您的程序经常进行这些重新定义,那么丢弃的JIT版本会导致内存泄漏吗?”这是一个很好的问题,在某些情况下答案可能是肯定的。如果
g
是您刚刚用exec
或eval
创建的函数,那么可能会出现不好的情况,因此最终在此处调用的函数对象数量是无限的。这是一个我们过去曾想过要解决的问题,但从未有时间去解决。如果您正在经历类似于泄漏的情况,并且已经隔离了这部分代码,那么我想说的是,这正是您所担心的。在这种情况下,我建议给pypy写封邮件-dev@python.org或者访问irc.freenode.net上的#pypy来描述您的案例你不应该担心什么。如果您所说的是执行错误的代码,那么这将是PyPy环境中的一个bug。那不太可能。另外,不要担心内存泄漏。即使有一个,它也不会构成足够的记忆,你会注意到或关心。您可能会受到某种内存错误的影响的唯一方法是,如果每次执行代码时更改该定义1000次。我怀疑这是真的
“过早优化是万恶之源”。也许你听过这句名言。我认为它也适用于处理将来可能发生但不太可能发生的问题。不要担心这些,除非你看到不良行为。我很怀疑你会。相信你的工具
相关问题 更多 >
编程相关推荐