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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
python实现用于测试网站访问速率的方法
May 26 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
Python实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
Django框架实现逆向解析url的方法
Jul 04 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
python numpy--数组的组合和分割实例
Feb 24 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 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
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
JSONP基础知识详解
2017/03/19 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
解决vue初始化项目一直停在downloading template的问题
2020/11/09 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
Saltstack快速入门简单汇总
2016/03/01 Python
如何将python中的List转化成dictionary
2016/08/15 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
Python OpenCV获取视频的方法
2018/02/28 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
生物制药专业求职信
2014/03/11 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
2014年领班工作总结
2014/11/25 职场文书
人事专员岗位职责
2015/02/03 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL