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中计算三角函数之cos()方法的使用简介
May 15 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
浅谈python中set使用
Jun 30 Python
python select.select模块通信全过程解析
Sep 20 Python
python3 cvs将数据读取为字典的方法
Dec 22 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
python日期与时间戳的各种转换示例
Feb 12 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
python实现批量命名照片
Jun 18 Python
Python使用内置函数setattr设置对象的属性值
Oct 16 Python
Python Numpy之linspace用法说明
Apr 17 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+MySQL的聊天室设计
2006/10/09 PHP
PHP 上传文件大小限制
2009/07/05 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
php下Memcached入门实例解析
2015/01/05 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
Python中字符串的修改及传参详解
2016/11/30 Python
对python中Json与object转化的方法详解
2018/12/31 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
FLIR美国官网:热成像, 夜视和红外摄像系统
2018/07/13 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
办公室文秘自我鉴定
2013/09/21 职场文书
小学生暑假感言
2014/02/06 职场文书
《雨霖铃》教学反思
2014/02/22 职场文书
购房意向书
2014/08/30 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书