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原始字符串(raw strings)用法实例
Oct 13 Python
python计算对角线有理函数插值的方法
May 07 Python
在Python中使用成员运算符的示例
May 13 Python
Python中转换角度为弧度的radians()方法
May 18 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
Python 切分数组实例解析
Nov 07 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
Tensorflow与Keras自适应使用显存方式
Jun 22 Python
python Selenium 库的使用技巧
Oct 16 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中变量及部分适用方法
2008/03/27 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
jQuery ajax MD5实现用户注册即时验证功能
2016/10/11 Javascript
鼠标拖动改变DIV等网页元素的大小的实现方法
2017/07/06 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
Python备份Mysql脚本
2008/08/11 Python
Python中运行并行任务技巧
2015/02/26 Python
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
Python的Urllib库的基本使用教程
2015/04/30 Python
让Python代码更快运行的5种方法
2015/06/21 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
公务员职业生涯规划书范文  
2014/01/19 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
文明礼仪标语
2014/06/13 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技