多线程获取句向量内存会一直增长

问题遇到的现象和发生背景

from sentence_transformers import SentenceTransformer
import emoji
import threading, json
import time
import gc
import objgraph
model2 = SentenceTransformer('distiluse-base-multilingual-cased')

#限制线程的最大数据

threadmax=threading.BoundedSemaphore(10)

def tfc(i):

print("当前第 {i} 个任务正在执行")
res="360儿童手表6C最大的亮点是远程智能拍照,搭载一颗30万像素的高清摄像头,家长可通过360儿童卫士APP远程控制手表拍照,当孩子遇到危险时一键SOS报警,手表将自动开启摄像头进"
countvector =model2.encode([res])[0]    #获取句向量
print(len(countvector))

def stat():

while True:
    thread_list = []
    for i in range(int(10)):
        t1 = threading.Thread(target= tfc, args=(1,))
        thread_list.append(t1)

    for t in thread_list:
        t.setDaemon(True)  # shifou
        t.start()

    for t in thread_list:
        t.join()
        thread_list.remove(t)  # 待执行结束删除子进程

    time_stamp = int(time.time())  # 获取当前时间的时间戳
    time_str =time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time_stamp))  # 输出 2021-09-10 09:49:15
    print(time_str)
    print('线程完成')
    time.sleep(1)

stat()

代码块功能插入代码,请勿粘贴截图
运行结果及报错内容

代码运行内存会一直增加,知道出现pycharm进程已结束,退出代码 -1073741819 (0xC0000005),上

我的解答思路和尝试过的方法

方法 tfc() 单独无限循环,内存不会一直增加,用上多线程就会内存溢出

我想要达到的结果

解决多线程获取句向量溢出问题

参考链接,希望有帮助哦

你这个while True死循环啊,一直在无线创建线程,然后执行,释放继续创建......肯定出不来,

死循环了,去掉 while True就好了

全局的 list容器,不停的插入对象,并且未删除被循环引用的del方法,就会发生内存泄露。使用gc模块试试,最常用就是gc.collect()方法import gc,使用collect方法对循环引用的对象进行垃圾回收。总感觉这块有点问题,为什么用两个循环进行判断开始和释放呢?

img