草庐IT

收集箱

全部标签

Python:exec 语句和意外的垃圾收集器行为

我发现exec有问题(它发生在一个必须使用用户编写的脚本进行扩展的系统中)。我可以将问题本身简化为这段代码:deffn():context={}exec'''classtest:def__init__(self):self.buf='1'*1024*1024*200x=test()'''incontextfn()我预计内存应该在函数fn调用后被垃圾收集器释放。然而,Python进程仍然消耗额外的200MB内存,我完全不知道这里发生了什么以及如何手动释放分配的内存。我怀疑在exec中定义一个类不是一个好主意,但是,首先,我想了解上面的示例中出了什么问题。看起来在另一个函数中包装类实例创建

python - 内部引用防止垃圾收集

我正在编写一个简单的平台游戏,我发现在删除“幽灵”实例时,它们会持续存在并且不会被垃圾回收。看起来虽然我删除了所有引用,但幽灵对象有某种内部引用阻止它们被垃圾收集。具体来说,它们具有作为方法开关的属性。下面的代码说明了我的问题:importweakrefweak_ghosts=weakref.WeakKeyDictionary()classGhost(object):def__init__(self):#passself.switch={'eat':self.eat,'sleep':self.sleep}defeat(self):passdefsleep(self):passghost

python - 垃圾收集在关闭一段时间后不会删除无法访问的对象

我有以下假设的Python程序,它使用了一些垃圾收集器函数(documentation):importgc#Shouldturnautomaticgarbagecollectionoffgc.disable()#Createthestringa="Awesomestringnumber1"#Makethepreviouslyassignedstringunreachable#(asanimmutableobject,willbereplaced,notedited)a="Let'sreplaceitbyanotherstring"#Accordingtothedocs,collectt

python - 将所有使用的 Python 模块收集到一个文件夹中?

我认为之前没有人问过这个问题——我有一个包含许多不同.py文件的文件夹。我制作的脚本只使用了一些,但有些调用了其他脚本,我不知道所有被使用的脚本。是否有一个程序可以获取使该脚本在一个文件夹中运行所需的一切?干杯! 最佳答案 使用标准库中的modulefinder模块,参见例如http://docs.python.org/library/modulefinder.html 关于python-将所有使用的Python模块收集到一个文件夹中?,我们在StackOverflow上找到一个类似的问

python - 如何在 python 中创建无法收集的垃圾?

我有一个长期运行的大型服务器,并且在数周内内存使用量稳步攀升。一般来说,正如下面所指出的,泄漏不太可能是我的问题;但是,我没有太多事情要做,所以我想看看是否有任何泄漏。获取控制台输出很棘手,所以我没有使用gc.set_debug()运行。不过这不是什么大问题,因为我已经很容易地添加了一个API来让它运行gc.collect()然后遍历gc.garbage并发送结果通过HTTP返回给我。我的问题是在本地短时间运行它时我的gc.garbage总是空的。在部署之前,我无法测试列出泄漏的代码。是否有创建一些无法收集的垃圾的简单方法,以便我可以测试列出这些垃圾的代码?

python - 从返回 NumPy 数组的循环中收集结果

这个问题在这里已经有了答案:HowcanIuse`return`togetbackmultiplevaluesfromaloop?CanIputtheminalist?(2个答案)关闭5个月前。我是公认的非常基础的Python程序员,在遇到实现各种研究问题的问题时尝试学习。而且我遇到了其中一个问题-特别是如何处理我返回一堆数据的循环,而不是通常的“输出一个数字”的例子,你只需将循环的结果添加到之前的所有内容.这是我要运行的未循环脚本的要点:https://gist.github.com/1390355真正重要的一点是model_solve函数的结尾:defmodel_solve(t):

python - 如何使用 scrapy 将多个页面的数据收集到单个数据结构中

我正在尝试从站点抓取数据。数据的结构是多个对象,每个对象都有一组数据。例如,有姓名、年龄和职业的人。我的问题是这些数据在网站中分为两个级别。第一页是,比如说,一个姓名和年龄列表,带有指向每个人个人资料页面的链接。他们的个人资料页面列出了他们的职业。我已经有一个用python编写的scrapy蜘蛛,它可以从顶层收集数据并通过多个分页爬行。但是,我如何从内页收集数据,同时保持它链接到合适的对象?目前,我将输出结构化为json{[name='name',age='age',occupation='occupation'],[name='name',age='age',occupation='

python - 在 nose 或 pytest 中收集以编程方式生成的测试套件的好方法

假设我有一个这样的测试套件:classSafeTests(unittest.TestCase):#snip20testfunctionsclassBombTests(unittest.TestCase):#snip10differenttestcases我目前正在做以下事情:suite=unittest.TestSuite()loader=unittest.TestLoader()safetests=loader.loadTestsFromTestCase(SafeTests)suite.addTests(safetests)ifTARGET!='prod':unsafetests=l

关于列表追加自身的python垃圾收集

这个问题在这里已经有了答案:WhatdoestheEllipsisobjectdo?(14个答案)关闭5年前。a=[2]a.append(a)然后我打印一个,[2,[...]]我也打印了[1][0]2什么是[...]?当我打印a[1][0]时,打印2,而不是[...]?

复合对象上的 python 垃圾收集器行为

如果复合对象的某些部分仍然被引用,python垃圾收集器是否会清理它例如deffoo():A=[[1,3,5,7],[2,4,6,8]]returnA[1]B=foo()A[0]会被垃圾回收吗?有没有办法通过代码确认? 最佳答案 没有引用列表A和嵌套列表A[0],所以是的,它们将从内存中删除。A[1]引用的嵌套列表对象没有返回到其原始容器的连接。请注意,执行此操作的不是垃圾收集器;GC只处理破坏循环引用。这个简单的案例完全由引用计数处理。foo()返回时,本地命名空间被清除。这意味着A被删除,这意味着列表对象引用计数下降到0。这会清