Python Pymunk内存泄漏和/或挂起

Python Pymunk内存泄漏和/或挂起,python,memory-leaks,pymunk,Python,Memory Leaks,Pymunk,我一直在用Python编写一个游戏,需要能够从物理引擎中添加和删除很多对象。在极端测试场景中,我可能会在几秒钟内耗尽内存。在正常情况下,积累需要一段时间。经过两天的工作,我发现了一个小的测试场景,它准确地显示了正在发生的事情。我的平台是Windows7 64x import pymunk import time from os import system space=pymunk.Space() width=5 height=5 poly=[(-width/2.0,-height/2.0),(-

我一直在用Python编写一个游戏,需要能够从物理引擎中添加和删除很多对象。在极端测试场景中,我可能会在几秒钟内耗尽内存。在正常情况下,积累需要一段时间。经过两天的工作,我发现了一个小的测试场景,它准确地显示了正在发生的事情。我的平台是Windows7 64x

import pymunk
import time
from os import system
space=pymunk.Space()
width=5
height=5
poly=[(-width/2.0,-height/2.0),(-width/2.0,height/2.0),(width/2.0,height/2.0),(width/2.0,-height/2.0)]
while(True):
    #time.sleep(.5) #
    system("pause")
    bodys=[pymunk.Body(mass=5,moment=pymunk.moment_for_poly(5, poly)) for a in range(200)] #num of objects here
    print "1"
    shapes=[pymunk.Poly(bod, poly) for bod in bodys]
    print "2"
    space.add(bodys)
    print "3"
    space.add(shapes)
    print "4"
    space.step(.5) #step has no effect on leak
    print "5"
    space.remove(space.bodies)
    print "6"
    space.remove(space.shapes)
    print "7"
    #space.remove(shapes)
    #print "6"
    #space.remove(bodys)
    #print "7"
所以,如果你玩一点。曾经有一段时间,这件事没有发生,而且会超出人们的记忆。但目前它仍停留在删除形状上。这两种形状都不会起作用。我的游戏从不挂起,只是吞噬记忆

在每几秒钟测试200个循环时,它将以50mb的速度跳转50Mbs,并在300mb左右结束。 我想我可能只是在运行垃圾收集器,但是大量的对象进出内存,即使只有一次。我让程序在不添加或删除对象的情况下运行。没有内存被回收

每个循环只添加和删除一个对象,没有泄漏,并且运行在非常低且恒定的内存上

我发现pymunk不会泄漏,但应用该方法无法修复任何问题。添加和删除速度较慢或不使用addlist和removelist。Pymunk单独一个对象不会泄漏。在我的游戏中,一次只有一个对象是

我已经尽了最大的努力去寻找任何错误的参考或参考周期。本例显示了没有太多(如果有的话)复杂的引用,并且存在内存回收问题

如有任何意见,将不胜感激

其他信息: 以每秒60帧的速度添加和删除每帧1个对象将以每秒约3 mbs的速度提升内存。
我的引擎一直处于独立状态,直到我发现这不是问题所在。同步运行仍然泄漏。

我无法重现此问题。我把你们的代码在我的电脑上运行了很长一段时间,内存稳定在55.2mb。也许有版本或操作系统之类的东西?我在OSX 10.8.4上试用了Python2.7 64位,使用了最新的pymunk主干。请将您正在运行的内容添加到您的问题中。@viblo Windows 7 64x。我尝试过很多变化。我发现一个小的1添加1删除方案从未泄漏。但我用它做任何其他事情,它就会泄漏。我有3个围绕pymunk构建的项目,它们都有相同的问题。我从未注意到,因为在正常情况下,添加和删除这么多对象需要很长时间。垃圾收集器通常会有一个庞大的body和poly列表,如果这意味着什么的话,这些body和poly是无法收集的。我在我的笔记本电脑上试用了Windows 7 64x和Python 2.7 32位,但仍然无法复制,内存消耗稳定在50 mb左右。你使用的python和pymunk版本是什么?然而,当我将对象的数量增加到500个时,发生了一些奇怪的事情,看起来我在OSX上遇到了这个问题,但在windows上,它仍然工作正常,没有增加内存使用。更奇怪的事情是:内存增加了,但只有while循环的前3次迭代。在这种情况下,它稳定在300mb。这需要一点时间,这就是为什么我一开始没有注意到它。