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抽象类的新写法
Jun 18 Python
Python写入数据到MP3文件中的方法
Jul 10 Python
python更改已存在excel文件的方法
May 03 Python
利用python画出折线图
Jul 26 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
python实现视频读取和转化图片
Dec 10 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
Python Sqlalchemy如何实现select for update
Oct 12 Python
Python实现给PDF添加水印的方法
Jan 25 Python
学会Python数据可视化必须尝试这7个库
Jun 16 Python
Python编程super应用场景及示例解析
Oct 05 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 静态变量的初始化
2009/11/15 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
表单提交验证类
2006/07/14 Javascript
任意位置显示html菜单
2007/02/01 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
vue配置font-awesome5的方法步骤
2019/01/27 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
python实现解数独程序代码
2017/04/12 Python
python中metaclass原理与用法详解
2019/06/25 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
优秀的教师个人的中文求职信
2013/09/21 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
装修公司管理制度
2015/08/05 职场文书
公司食堂管理制度
2015/08/05 职场文书
有关保护环境的宣传标语100条
2019/08/07 职场文书
mysql如何查询连续记录
2022/05/11 MySQL
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python