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

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 代码里的限制内存分配的方法呢?

举报· 309 次点击
登录 注册 站外分享
2 条回复  
Donaldo 小成 昨天 03:18
和你的容器办法类似,但不用这么重,直接把这段代码丢进一个 cgroup 里面,这个 cgroup 限制好内存就行
Donaldo 小成 昨天 03:20
Windows 没有 cgroup ,我找到一个工具:https://github.com/lowleveldesign/process-governor
返回顶部