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打开文件并获取文件相关属性的方法
Apr 23 Python
详解Python中的条件判断语句
May 14 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
Feb 12 Python
Python2与Python3的区别实例总结
Apr 17 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
Django接收照片储存文件的实例代码
Mar 07 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
PageFactory设计模式基于python实现
Apr 14 Python
python实现不同数据库间数据同步功能
Feb 25 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
PHPAnalysis中文分词类详解
2014/06/13 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
jQuery拖动布局其结果保存到数据库
2015/10/09 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
2020/04/18 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
Python简单生成随机数的方法示例
2018/03/31 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
工商技校毕业生自荐信
2013/11/15 职场文书
机修工工作职责
2014/02/21 职场文书
新年主持词
2014/03/27 职场文书
护士先进个人总结
2015/02/13 职场文书
个人借条范本
2015/05/25 职场文书
2015暑假社会调查报告
2015/07/13 职场文书