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