gpt4 book ai didi

python - 通过多处理减少内存占用?

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:49 24 4
gpt4 key购买 nike

我的一个应用程序运行大约 100 个 worker 。它最初是一个线程 应用程序,但遇到了性能(延迟)问题。所以我将这些工作人员转换为 multiprocessing.Processes。下面的基准测试表明,负载的减少是以更多内存使用为代价的(因子 6)。

那么,如果 Linux 使用 cow 并且工作人员不共享任何数据,那么内存使用量从何而来?

如何减少内存占用? (替代问题:如何减少线程的负载?)

Linux 2.6.26、4 CPU 2G RAM 上的基准测试:(请注意,cpu 使用率以一个 cpu 的百分比给出,因此满载是 400%。这些数字是从查看 Munin 图得出的。)

                  | threading | multiprocessing
------------------+-----------+----------------
memory usage | ~0.25GB | ~1.5GB
context switches | ~1.5e4/s | ~5e2/s
system cpu usage | ~30% | ~3%
total cpu usage | ~100% | ~50%
load avg | ~1.5 | ~0.7

背景:该应用程序正在处理来自网络的事件,并将其中一些事件存储在 MySQL 数据库中。

最佳答案

我的理解是,对于像 Python 这样的动态语言,写时复制不如在 fork 后写入(并因此复制)更多内存有效。随着 Python 解释器在程序中的运行,除了您的代码之外,还有很多事情正在发生。例如引用计数 - 由于引用计数需要将引用计数写入内存(触发副本),所以非常对象将被写入得太快。

考虑到这一点,您可能需要采用混合线程/处理方法。有多个进程以利用多个内核等,但每个进程都运行多个线程(这样你就可以处理你需要的并发级别)。您只需要试验运行的线程数与进程数。

关于python - 通过多处理减少内存占用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com