如何将Python内存释放回操作系统

问题描述 投票:0回答:1

我有一个长时间运行的 Python 脚本,需要 1-2 小时才能完成。它在具有 1 个 CPU 的 4GB 容器上运行。

该脚本在 for 循环中获取并处理数据。类似于以下内容:

for i in ENOUGH_API_CALLS_TO_TAKE_2_HOURS:
    data = fetch_data()
    process_data(data)

由于内存不足,4GB 容器在脚本执行中途崩溃。不过,任何单独的 API 调用都无法接近检索 4GB 的数据。

使用

tracemalloc
进行调试后,我认为 Python 在每次 API 调用上都会慢慢消耗内存,而不会将其释放回操作系统。最终因超出内存限制而导致进程崩溃。

我读过线程,其中讨论了使用多处理来确保任务完成时释放内存。但这里我只有 1 个 CPU,所以我没有第二个处理器可以使用。

还有其他方法可以从主线程内部将内存释放回操作系统吗?

注意我已经尝试过

gc.collect()
但没有成功。

python memory
1个回答
0
投票

多处理不需要您拥有多个物理或逻辑CPU。如果您查看 PC 上的任务管理器,几乎可以肯定正在运行的进程比您拥有的内核或线程还要多。

在这种情况下,您的单个处理器一次只能主动处理一项任务,但它可以来回切换,但需要一点开销。这也许会稍微延长整体运行时间,但它确实解决了消耗资源的问题。

您是否已验证您确实内存不足(例如,通过检查容器上的日志,或实时观察 python 进程的内存使用情况)?如果您不确定,那么在深入将代码更新为可能会较慢的内容(由于生成子进程的开销)之前,花时间确认这就是问题可能是有价值的。

© www.soinside.com 2019 - 2024. All rights reserved.