为啥python线程会消耗这么多内存?
Posted
技术标签:
【中文标题】为啥python线程会消耗这么多内存?【英文标题】:Why does python thread consume so much memory?为什么python线程会消耗这么多内存? 【发布时间】:2011-04-12 14:14:51 【问题描述】:为什么python线程会消耗这么多内存?
我测得生成一个线程会消耗 8 兆内存,几乎和一个全新的 python 进程一样大!
操作系统:Ubuntu 10.10
编辑:由于大众的需求,我将给出一些无关紧要的例子,这里是:
from os import getpid
from time import sleep
from threading import Thread
def nap():
print 'sleeping child'
sleep(999999999)
print getpid()
child_thread = Thread(target=nap)
sleep(999999999)
在我的盒子上,pmap pid 会给出 9424K
现在,让我们运行子线程:
from os import getpid
from time import sleep
from threading import Thread
def nap():
print 'sleeping child'
sleep(999999999)
print getpid()
child_thread = Thread(target=nap)
child_thread.start() # <--- ADDED THIS LINE
sleep(999999999)
现在 pmap pid 将给出 17620K
所以,额外线程的成本是 17620K - 9424K = 8196K
即。 87% 运行一个全新的独立进程!
这不就是错了吗?
【问题讨论】:
除非您告诉我们您正在尝试做什么以及如何做,否则任何人都无法回答这个问题。代码?使用示例?输入数据? 见***.com/questions/110259/python-memory-profiler 【参考方案1】:这不是特定于 Python 的,它与操作系统为每个线程分配的单独堆栈有关。您的操作系统上的默认最大堆栈大小恰好是 8MB。
请注意,8MB 只是一块被搁置的地址空间,最初只分配了很少的内存。额外的内存会在需要时提交给堆栈,最高可达 8MB 的限制。
可以使用ulimit -s
调整限制,但在这种情况下,我认为没有理由这样做。
顺便说一句,pmap
显示了地址空间的使用情况。这不是衡量 内存 使用情况的好方法。如果相关的话,这两个概念是完全不同的。
【讨论】:
谢谢,你刚刚救了我的命@Guido 对不起,我会在下一个问题上表扬 python。以上是关于为啥python线程会消耗这么多内存?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 iOS 设备上的 glGenerateMipmap() 会占用这么多客户端内存?