解决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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爬吧爬吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值