在设置多线程的时候,要先将原本待传入的参数列表进行一个平均的切割,从而达到平均分配给各个线程任务的效果,切割方法如下:
def split_list(list,thread_num):
list_total = []
num = thread_num # 线程数量
x = len(list) // num # 将参数进行分批(5批)方便传参
count = 1 # 计算这是第几个列表
for i in range(0, len(list), x):
if count < num:
list_total.append(list[i:i + x])
count += 1
else:
list_total.append(list[i:]) # 多余的参数全部放在最后一个列表中
break
return list_total
if __name__ == '__main__':
list = ['1', '1', '1','1', '1', '1','1', '1', '1','1', '1', '1','1', '1', '1','1', '1', '1','1', '1','1']
num = 5 # 将要创建的线程数量
list_total = split_list(list,num)
for i in list_total:
print(i)
输出结果:
到这一步就切割完成,下面附上线程传参代码:
def split_list(list,thread_num):
list_total = []
num = thread_num # 线程数量
x = len(list) // num # 将参数进行分批(5批)方便传参
count = 1 # 计算这是第几个列表
for i in range(0, len(list), x):
if count < num:
list_total.append(list[i:i + x])
count += 1
else:
list_total.append(list[i:]) # 多余的参数全部放在最后一个列表中
break
return list_total
if __name__ == '__main__':
list = ['1', '1', '1','1', '1', '1','1', '1', '1','1', '1', '1','1', '1', '1','1', '1', '1','1', '1','1']
num = 5 # 将要创建的线程数量
list_total = split_list(list,num)
for i in list_total:
print(i)
thread_list =[] # 创建线程池
for url in list_total: # 添加线程
t = MyThread(func=get_all_ip,args=url)
thread_list.append(t)
# thread1 = MyThread(func=get_all_ip,args=list_total[0])
# thread2 = MyThread(func=get_all_ip,args=list_total[1])
for t in thread_list: # 批量启动线程
t.start()
for t in thread_list: # 主线程等待子线程
t.join()