ThreadPoolExecutor已经是一个很完善的多线程池的库了,不过在项目里面老是重复判断list的长度来设置线程数,每次各个地方去修改真的是太麻烦了。
想要根据参数的长度动态控制线程的的数量,同时实现配置全局化,所以又封装成了一个函数,直接调用并传入多线程函数和参数list即可,适合我这样的懒人使用~
from concurrent.futures import ThreadPoolExecutor # 多线程库
'''
author:LancerWu
email:[email protected]
'''
def multiprocess(func, query_list):
'''
多线程函数
:param func: 执行函数
:param query_list: 参数组成的list
:return:
'''
try:
length = len(query_list) # 统计list长度,用来安排线程数
nums = 4 # 默认4个线程
if length < nums:
if length == 0:
return print('list为空')
else:
n = length
else:
n = nums
# 多线程执行
with ThreadPoolExecutor(n) as executor:
executor.map(func, query_list)
print('done')
except Exception as e:
print('error:%s' % e)
return None
def test_func(n):
print(n)
if __name__ == "__main__":
# 构造作为参数的list
test_list = [i for i in range(20)]
# 多线程运行,会打印出list中的数值
multiprocess(test_func, test_list)
源码地址:
https://github.com/wuxs231/python_scripts