V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
xiaolinjia
V2EX  ›  Python

请问下是不是输出到控制台上的信息也会算在内存消耗里啊。

  •  
  •   xiaolinjia · 2020-11-04 11:27:25 +08:00 · 1845 次点击
    这是一个创建于 1240 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近用 py 写几个检测脚本,由于想实时看某些状态对不对,所以打了很多信息到终端上,结果跑几天,内存就顶不住了,不知道是不是这个原因导致的。
    第 1 条附言  ·  2020-11-04 17:15:43 +08:00
    再补充说明一下:
    流程是,开启一个子线程去获取 socket 的 bytes 数据,然后 json.load 成 list,放到 deque 里。deque 里 maxlen 只设为 1 (因为每次检测分析的时候,只想分析最新的 socket 数据)。
    然后主线程,就是拿这 list 去检测分析(因为这检测分析时间较久,因此可能出现检测期间,会获取到多次 socket 数据,然后多次 deque.append )
    但是现在发现一个问题,就是我本来想着,deque.append,挤掉的 list 会被自动回收,内存会还回来(因为我想的是,主线程还在分析,也就没有对这个 list 引用,那它的引用计数应该不会增加,那么就会被 gc 自动回收)。结果发现并没有,还是占在那。难道是因为这个原因导致的吗?
    第 2 条附言  ·  2020-11-05 10:54:29 +08:00
    刚测试了一下子,死循环 print,发现内存没变。
    死循环 arcpy.AddMessage,内存会狂涨。
    我本以为 arcpy.AddMessage 也是跟 print 一样,但是现在看来他大概是实例化了一个 Message 对象,然后输出到控制台的。输出的越多,他实例化的对象就越多,然后内存就涨爆了。
    arcgis 真坑。
    3 条回复    2020-11-05 01:17:39 +08:00
    lx0758
        1
    lx0758  
       2020-11-04 16:37:53 +08:00
    你怕不是一直在累加, 要知道一天的日志少说也有几十上百兆
    lx0758
        2
    lx0758  
       2020-11-04 16:38:58 +08:00
    看错了, 无视上面的回复吧
    abersheeran
        3
    abersheeran  
       2020-11-05 01:17:39 +08:00
    怕是 Socket 没释放吧。Python 处理循环引用的能力很弱,我以前也遇见过类似的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2601 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:53 · PVG 23:53 · LAX 08:53 · JFK 11:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.