Python此设置是否存在内存泄漏?

Python此设置是否存在内存泄漏?,python,Python,我有几个简单的脚本可以连续运行(24/7)。 然而,其中一些脚本正在慢慢吞噬我所有的记忆。我不明白为什么/怎么做。一般格式为: import time SLEEPTIME = 10 # some number so it's not always running def main(): # example stuff, obviously much more complex in actual for i in xrange(0, 10000): i def r

我有几个简单的脚本可以连续运行(24/7)。 然而,其中一些脚本正在慢慢吞噬我所有的记忆。我不明白为什么/怎么做。一般格式为:

import time
SLEEPTIME = 10 # some number so it's not always running
def main():
    # example stuff, obviously much more complex in actual
    for i in xrange(0, 10000):
        i

def run():
    while True:
        start = time.time()
        main()
        time.sleep(SLEEPTIME - (time.time() - start))
        print('Finish loop')
if __name__ == '__main__':
    run()
我通过导航到文件夹nohup python script.py& (ubuntu 12.04服务器,python 2.7.3)

有没有可能不以我创建的格式收集垃圾?有没有可靠的方法确保服务器释放所有内存?运行垃圾收集很糟糕(而且不起作用)


谢谢

如果您在基于*nix的系统上运行,我建议您运行cron作业

Cron作业通过每x分钟、每小时或每x天安排脚本来工作。您的脚本将简单地运行,做一些工作,然后退出,而不是进入睡眠状态。您的简化脚本将如下所示:

def main():
    # example stuff, obviously much more complex in actual
    for i in xrange(0, 10000):
        pass

def run():
    main()

if __name__ == '__main__':
    run()
这样做的好处是,脚本每次都从“新鲜”开始,您不必担心内存泄漏

这里有一行代码指定每分钟开始的cron作业:

*/60 * * * * *     root python /path/to/your/script.py

“示例内容,实际上显然要复杂得多”——你在问“更复杂得多”的代码是否可能存在内存泄漏?是的,这是可能的。我要做的第一件事是确定你的记忆不仅仅是存在。如果没有真正看到处理循环中到底是什么,我们将永远无法帮助你。话虽如此,python中的内存泄漏通常是由于循环引用引起的,或者如果您在全局范围内持有对其他变量的引用,而您没有意识到。我想我真正想知道的是,即使主循环内有循环引用,即使我退出主循环,那些东西不会死吗?