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根据路径导入模块的方法
Sep 30 Python
python在windows命令行下输出彩色文字的方法
Mar 19 Python
python获得两个数组交集、并集、差集的方法
Mar 27 Python
Python实现的中国剩余定理算法示例
Aug 05 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
pytorch + visdom 处理简单分类问题的示例
Jun 04 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
Python下简易的单例模式详解
Apr 08 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
python 负数取模运算实例
Jun 03 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
php简单实现发送带附件的邮件
2015/06/10 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
jquery如何把参数列严格转换成数组实现思路
2013/04/01 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
基于js中document.cookie全面解析
2017/09/14 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
Python 性能优化技巧总结
2016/11/01 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
写给女生的道歉信
2014/01/08 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
销售目标责任书
2014/07/23 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL