我有一个使用大量软件包的python应用程序,在运行期间我遇到了一些内存泄漏,即使我复制并删除了所有变量,这也会累积。
所以最终程序崩溃了。所以我认为解决方案可能是在内存出现问题时重启程序。为了消除所有垃圾,需要杀死旧程序以在启动新会话后释放内存。
基本代码可能如下所示:
results = load('results')
data = load('data')
results += some_stupid_operation(results,data)
save('results', results)
restart_program() # Kill current program and start new instance
如果是在Ipython中,那也没关系。
免责声明:我知道这通常不是内存泄漏的解决方案。将操作放在函数中应该可以解决问题。因为垃圾收集器应该像dabadaba评论的那样自行修复它。
Rossi Milan Bob给出的解决方案。示例代码:
#!/usr/bin/env python
# program testing the solution
import numpy as np
import os
import sys
if len(sys.argv)==1:
sys.argv=[sys.argv[0],'1']
else:
sys.argv[1]=str(int(sys.argv[1])+1) # increment iteration
print sys.argv
a=np.zeros(10**6) # approximate 10 MB
# Memory does not accumulate over iterations
# Looking at system monitor
if int(sys.argv[1])<100:
os.execv(sys.executable, ['python'] + sys.argv)
答案 0 :(得分:1)
如果您正在运行脚本,请使用此代码重新启动脚本,例如关注$ python yourpgm.py
os.execv(sys.executable, ['python'] + sys.argv)
如果您正在运行$ chmod a+x yourpgm.py
和$ ./yourpgm.py
等脚本,请使用以下代码重新启动该程序。
os.execv(__file__, sys.argv)
无论哪种方式,都不要忘记导入sys模块:
import sys
确保通过在代码顶部添加以下代码使脚本可执行
#!/usr/bin/env python