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
HawkinsSherpherd
V2EX  ›  Python

有什么好办法限制 Python 的内存分配吗?

  •  1
     
  •   HawkinsSherpherd · 2 天前 · 1193 次点击

    这是一段会吃掉几乎所有可用内存的代码:

    def Decompress_Gzip_With_Progress_Bar(gzip_path, output_path):
        with gzip.open(gzip_path, 'rb') as f_in:
            with open(output_path, 'wb') as f_out:
                file_size = Get_Uncompressed_Size(gzip_path)
                chunk_size = 1024 * 1024
                with tqdm(total=file_size, unit='B', unit_scale=True, desc="Decompressing " + gzip_path) as pbar:
                    for block in iter(lambda: f_in.read(chunk_size), b''):
                        f_out.write(block)
                        pbar.update(len(block))
    

    它被用于解压一个解压后大概 4G 大小的文件。

    直接在我的 16G 内存的开发虚拟机上运行,它会吃掉所有的内存。

    但是,如果我把它放到一个分配 1G 内存的容器里,它不仅能运行,甚至还能运行得更快。

    我试过用 resource 限制内存分配,但是它还是会吃满所有内存。

    有没有什么能直接写到 Python 代码里的限制内存分配的方法呢?

    6 条回复    2025-01-04 12:25:38 +08:00
    Donaldo
        1
    Donaldo  
       1 天前
    和你的容器办法类似,但不用这么重,直接把这段代码丢进一个 cgroup 里面,这个 cgroup 限制好内存就行
    Donaldo
        2
    Donaldo  
       1 天前
    Windows 没有 cgroup ,我找到一个工具:https://github.com/lowleveldesign/process-governor
    fighterhit
        3
    fighterhit  
       1 天前   ❤️ 1
    那说明基本都是 cache 啊,如果 rss 常驻内存应该早 oom 了
    paopjian
        4
    paopjian  
       1 天前
    吃满内存的行为是操作系统的缓存吧, 如果其他程序再需要,会清理内容?
    sagaxu
        5
    sagaxu  
       1 天前
    循环内加入强制 gc 试试

    pbar.update(len(block))
    gc.collect()
    zsj1029
        6
    zsj1029  
       1 天前 via iPhone
    只要不会 oom 就不用管吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1053 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 18:41 · PVG 02:41 · LAX 10:41 · JFK 13:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.