python多线程内存溢出_ThreadPoolExecutor使用后内存溢出(一)

本文探讨了在处理大量数据时使用ThreadPoolExecutor可能导致的内存溢出问题。通过分析源码,发现线程池的无界队列是内存泄漏的原因。解决方法是重写ThreadPoolExecutor,使用有界队列限制任务数量,避免线程池消费速度跟不上生产速度导致内存积压。
摘要由CSDN通过智能技术生成

Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待

4999元包邮

去购买 >

问题排查

在从kafka获取数据消费过程中,使用ThreadPoolExecutor(线程池),在数据量大的情况下,导致内存泄露,机器卡死挂掉;

伪代码为:def deal_func(msg):

# 处理相关逻辑

pass

pool = ThreadPoolExecutor(10)

# 链接kafka

while True:

msg = client.poll(0.1)

# 调用

pool.submit(deal_func, msg)

在调用该程序之后,内存直线上升;在查询文章后,发现原因,在循环调用线程池时,进程会不断的往线程池中扔任务,而不会判断,等待线程池中是否存在空闲进程;

验证程序:import time

from concurrent.futures import ThreadPoolExecutor

def func(num):

print(f'the {num} run')

time.sleep(2)

return num * num

def main():

pool = ThreadPoolExecutor(2)

result = []

for i in range(1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值