Python重启程序,如果达到一些语句

时间:2017-03-28 08:03:27

标签: python

我有一个使用大量软件包的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)

1 个答案:

答案 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