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实现获取某天是某个月中的第几周
Feb 11 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
Python实现简单的四则运算计算器
Nov 02 Python
Python判断以什么结尾以什么开头的实例
Oct 27 Python
详解Python requests 超时和重试的方法
Dec 18 Python
numpy数组之存取文件的实现示例
May 24 Python
给大家整理了19个pythonic的编程习惯(小结)
Sep 25 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
python os模块常用的29种方法使用详解
Jun 02 Python
Python 程序员必须掌握的日志记录
Aug 17 Python
Python实现GIF动图以及视频卡通化详解
Dec 06 Python
Python学习之迭代器详解
Apr 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
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
ThinkPHP5&5.1框架关联模型分页操作示例
2019/08/03 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
javascript+css 网页每次加载不同样式的实现方法
2009/12/27 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
2017/08/19 jQuery
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
python自动化测试之setUp与tearDown实例
2014/09/28 Python
python中sys.argv函数精简概括
2018/07/08 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
高中数学教师求职信
2013/10/30 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
村官个人总结范文
2015/03/03 职场文书
求职信格式范文
2015/03/19 职场文书
史上最牛辞职信
2015/05/13 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
MySQL自定义函数及触发器
2022/08/05 MySQL