python中的线程消耗的内存

时间:2018-11-10 18:59:43

标签: python multithreading

在这里,我可以花些时间来完成线程。如何获取线程消耗的内存。

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()

1 个答案:

答案 0 :(得分:0)

(恐怕这是一个无法回答的问题,但我认为这是由于主题的性质所致……)

线程内存使用率的概念定义不明确。线程共享它们的内存。唯一真正的线程本地内存是它的调用堆栈,除非您进行认真递归操作,否则这不是有趣的部分。

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

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), 拥有 the 内存 ?这两个线程都不存在,但是仍然可以访问,因此不会泄漏。线程不拥有内存(超出其调用栈);流程。

根据要使用这些内存消耗数字的方式,按照@Torxed的建议使用cprofiler可能会有所帮助。