python中线程消耗的内存

Posted

技术标签:

【中文标题】python中线程消耗的内存【英文标题】:memory consumed by a thread in python 【发布时间】:2018-11-10 18:59:43 【问题描述】:

在这里我可以得到线程完成的时间。如何获取线程消耗的内存。

import threading
import time
class mythread(threading.Thread):
    def __init__(self,i,to):
        threading.Thread.__init__(self)
        self.h=i
        self.t=to
        self.st=0
        self.end=0
    def run(self):
        self.st =time.time()
        ls=[]
        for i in range(self.t):
            ls.append(i)
            time.sleep(0.002)
        self.end=time.time()
        print "total time taken by  is ".format(self.h,self.end-self.st)
thread1=mythread("thread1",10)
thread2=mythread("thread2",20)
thread1.start()
thread2.start()
thread1.join()
thread2.join()

【问题讨论】:

我想要只在运行时使用的内存 您可以使用cprofiler 并将其传递给kcachegrind。如果您不知道我在说什么,请read up 了解调试过程和内存分析。 我想知道你是否知道你测量的是什么,使用time.time()。这不是线程的 cpu 时间,因为time.time() 返回的是挂钟时间,即系统的实际时间。由于两个线程或多或少是并行启动的,它们将同时执行,并且您基本上将测量它们的组合时间(以及当时在 CPU 上发生的任何其他事情)。也许您想改为查看time.thread_time() 【参考方案1】:

(恐怕这有点无法回答,但我认为这是由于主题的性质......)

线程内存使用的概念不是一个明确定义的概念。线程共享它们的内存。唯一真正的线程本地内存是它的调用堆栈,除非你认真递归地做一些事情,否则这不是有趣的部分。

“普通”内存的所有权并不是那么简单。考虑这段代码:

import json
import threading
import time

data_dump = 

class MyThread(threading.Thread):

    def __init__(self, name, limit):
        threading.Thread.__init__(self)
        self.name = name
        self.limit = limit
        data_dump[name] = []

    def run(self):
        start = time.monotonic()
        for i in range(self.limit):
            data_dump[self.name].append(str(i))
            time.sleep(0.1)
        end = time.monotonic()
        print("thread wall time: s".format(end-start))

t1 = MyThread(name="one", limit=10)
t2 = MyThread(name="two", limit=12)
t1.start()
t2.start()
t1.join()
t2.join()
del t1
del t2
print(json.dumps(data_dump, indent=4))

data_dump 的输出将显示线程附加(并因此分配)的所有字符串。然而,在输出时(最终的print), 拥有 内存?两个线程都已不复存在,但仍然可以访问,因此不是泄漏。线程不拥有内存(超出它们的调用堆栈);进程可以。

根据您想对这些内存消耗数字做什么,使用 @Torxed 推荐的 cprofiler 可能会有所帮助。

【讨论】:

以上是关于python中线程消耗的内存的主要内容,如果未能解决你的问题,请参考以下文章

在多线程环境中使用 PyCurl 时程序消耗的内存不断增长

如何减少python内存的消耗?

线程sleep 会不会耗内存

一行代码搞定 Python 逐行内存消耗分析

Python:内存泄漏调试

Python 内存消耗:dict VS 元组列表