python线程池(threadpool)模块使用笔记详解


Posted in Python onNovember 17, 2017

最近在做一个视频设备管理的项目,设备包括(摄像机,DVR,NVR等),包括设备信息补全,设备状态推送,设备流地址推送等,如果同时导入的设备数量较多,如果使用单线程进行设备检测,那么由于设备数量较多,会带来较大的延时,因此考虑多线程处理此问题。

可以使用python语言自己实现线程池,或者可以使用第三方包threadpool线程池包,本主题主要介绍threadpool的使用以及其里面的具体实现。

一、安装与简介

pip install threadpool  

pool = ThreadPool(poolsize) 
requests = makeRequests(some_callable, list_of_args, callback) 
[pool.putRequest(req) for req in requests] 
pool.wait()

第一行定义了一个线程池,表示最多可以创建poolsize这么多线程;

第二行是调用makeRequests创建了要开启多线程的函数,以及函数相关参数和回调函数,其中回调函数可以不写,default是无,也就是说makeRequests只需要2个参数就可以运行;

第三行用法比较奇怪,是将所有要运行多线程的请求扔进线程池,[pool.putRequest(req) for req in requests]等同于

for req in requests:  pool.putRequest(req)

第四行是等待所有的线程完成工作后退出。

二、代码实例

import time
def sayhello(str):
  print "Hello ",str
  time.sleep(2)

name_list =['xiaozi','aa','bb','cc']
start_time = time.time()
for i in range(len(name_list)):
  sayhello(name_list[i])
print '%d second'% (time.time()-start_time)

改用线程池代码,花费时间更少,更效率

import time
import threadpool 
def sayhello(str):
  print "Hello ",str
  time.sleep(2)

name_list =['xiaozi','aa','bb','cc']
start_time = time.time()
pool = threadpool.ThreadPool(10) 
requests = threadpool.makeRequests(sayhello, name_list) 
[pool.putRequest(req) for req in requests] 
pool.wait() 
print '%d second'% (time.time()-start_time)

当函数有多个参数的情况,函数调用时第一个解包list,第二个解包dict,所以可以这样:

def hello(m, n, o):
  """"""
  print "m = %s, n = %s, o = %s"%(m, n, o)
   
 
if __name__ == '__main__':
   
  # 方法1 
  lst_vars_1 = ['1', '2', '3']
  lst_vars_2 = ['4', '5', '6']
  func_var = [(lst_vars_1, None), (lst_vars_2, None)]
  # 方法2
  dict_vars_1 = {'m':'1', 'n':'2', 'o':'3'}
  dict_vars_2 = {'m':'4', 'n':'5', 'o':'6'}
  func_var = [(None, dict_vars_1), (None, dict_vars_2)]  
   
  pool = threadpool.ThreadPool(2)
  requests = threadpool.makeRequests(hello, func_var)
  [pool.putRequest(req) for req in requests]
  pool.wait()

需要把所传入的参数进行转换,然后带人线程池。

def getuserdic():
  username_list=['xiaozi','administrator']
  password_list=['root','','abc123!','123456','password','root']
  userlist = []
  
  for username in username_list:
    
    user =username.rstrip()
    for password in password_list:
      pwd = password.rstrip()
      userdic ={}
      userdic['user']=user
      userdic['pwd'] = pwd
      tmp=(None,userdic)
      userlist.append(tmp)
  return userlist

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中文乱码的解决方法
Nov 04 Python
Python中logging模块的用法实例
Sep 29 Python
tensorflow训练中出现nan问题的解决
Feb 10 Python
简单实现Python爬取网络图片
Apr 01 Python
python从子线程中获得返回值的方法
Jan 30 Python
Python程序包的构建和发布过程示例详解
Jun 09 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
深入了解Python iter() 方法的用法
Jul 11 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
Python3列表List入门知识附实例
Feb 09 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
python交互式图形编程实例(三)
Nov 17 #Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 #Python
python交互式图形编程实例(二)
Nov 17 #Python
python交互式图形编程实例(一)
Nov 17 #Python
Python金融数据可视化汇总
Nov 17 #Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 #Python
Python中super函数的用法
Nov 17 #Python
You might like
php实现利用phpexcel导出数据
2013/08/24 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
JavaScript的eval JSON object问题
2009/11/15 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
jquery.validate使用详解
2016/06/02 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
解决img标签上下出现间隙的方法
2016/12/14 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
医生自荐信
2013/10/11 职场文书
民生工程实施方案
2014/03/22 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
教师党员自我评价2015
2015/03/04 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
团委副书记工作总结
2015/08/14 职场文书
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android
python 使用pandas读取csv文件的方法
2022/12/24 Python