博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 线程池的使用
阅读量:5139 次
发布时间:2019-06-13

本文共 1090 字,大约阅读时间需要 3 分钟。

使用场景

CMDB 资产采集采用中控机for 循环主机列表挨个针对主机进行远程资产采集并且提交数据到API,此方式为一个一个的数据采集并提交,在主机数量庞大的请况下此方式严重耗时。

再次引入线程池方式,例如建立10个线程,每次10个线程同时采集10个主机信息并且入库,先执行完任务的线程继续采集后面的主机信息,一直保持10线程同时执行任务。

代码

import requestsimport jsondef task(host):    info = {
'hostname':host,'disk':'100G'} #采集主机的资产信息 url = "http://127.0.0.1:8000/api/asset/" r1 = requests.post( #资产入库 url=url, data=json.dumps(info).encode('utf-8') # 对于字典等特殊数据格式需要json 对数据格式化处理,再编码才能传输 ) print(r1.text)def ssh(): r1 = requests.get(url='http://127.0.0.1:8000/api/asset/') #先获取要采集资产信息的主机列表信息 host_list = r1.json() from concurrent.futures import ThreadPoolExecutor #建立线程池 pool = ThreadPoolExecutor(10) for host in host_list: pool.submit(task,host) #host 作为参数带入task函数中,每次执行10个task 函数任务
View Code

总结

在for 循环中执行任务时,根据for 循环的列表元素挨个顺序执行,引入线程池后,将每个循环执行的任务定义成函数task,将for 循环的主机名作为参数带入任务函数task 中,定义了多少线程池数量,就同时执行几个task 任务。

线程池数量不是越多越好,根据任务数量以及主机的cpu 等性能决定

转载于:https://www.cnblogs.com/fanggege/p/10261057.html

你可能感兴趣的文章
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>
linux命令之ifconfig详细解释
查看>>
NAT地址转换
查看>>
Nhibernate 过长的字符串报错 dehydration property
查看>>
Deque - leetcode 【双端队列】
查看>>
gulp插件gulp-ruby-sass和livereload插件
查看>>
免费的大数据学习资料,这一份就足够
查看>>
clientWidth、clientHeight、offsetWidth、offsetHeight以及scrollWidth、scrollHeight
查看>>
企业级应用与互联网应用的区别
查看>>
itext jsp页面打印
查看>>
Perl正则表达式匹配
查看>>
DB Change
查看>>
nginx --rhel6.5
查看>>
Eclipse Python插件 PyDev
查看>>
selenium+python3模拟键盘实现粘贴、复制
查看>>