解决python多线程导致的内存增加问题

这两天写了一个多线程脚本跑业务,因为开的线程是1000个,所以发现脚本运行时不超过10分钟就会导致电脑内存爆满直到无法运行程序卡死退出。

网上看了一些文章发现可能是在将线程添加到线程列表里,且外部循环加上while True死循环后,线程列表无限扩大的问题。

最终通过代码添加thread.join()和threads.remove(thread)解决了内存增加这个问题。以下为代码。

threads = []	# 线程表
def do_something():
	print(1)

if __name__ == "__main__":
	while 1:
	    for i in range(10000):
	        threadmax.acquire()
	        t = threading.Thread(target=do_something)
	        t.start()
	        threads.append(t)
	    for t in threads:
	        t.join() # 阻滞进程
	        threads.remove(t) # 待执行结束删除子进程

在后续的测试中发现注释掉t.join()一样会导致内存快速增加到爆满,所以问题的核心应该是未添加t.join()阻滞进程时,有部分未结束运行的进程导致内存占用,且在执行结束后未删除子进程。

更详细的解释参考:https://blog.wangtwothree.com/code/196.html#comment-744

你可能感兴趣的:(python,python)