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中for循环控制语句用法实例
Jun 02 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
python 实现查找文件并输出满足某一条件的数据项方法
Jun 12 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
基于Python实现签到脚本过程解析
Oct 25 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
提升python处理速度原理及方法实例
Dec 25 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
python爬虫用request库处理cookie的实例讲解
Feb 20 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开发过程中关于继承的使用方法分享
2011/06/17 PHP
php多线程并发实现方法
2016/09/30 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
解决vue项目router切换太慢问题
2020/07/19 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
对于Python的Django框架部署的一些建议
2015/04/09 Python
详解Python中with语句的用法
2015/04/15 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
django中send_mail功能实现详解
2018/02/06 Python
python距离测量的方法
2018/03/06 Python
python实现两个文件合并功能
2018/04/01 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
多个python文件调用logging模块报错误
2020/02/12 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
横幅标语大全
2014/06/17 职场文书
大学生个人年度总结范文
2015/02/15 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
田径运动会通讯稿
2015/07/18 职场文书
婚宴祝酒词大全
2015/08/10 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python