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让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
python如何实现远程控制电脑(结合微信)
Dec 21 Python
Python闭包执行时值的传递方式实例分析
Jun 04 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
学习和使用python的13个理由
Jul 30 Python
Python使用matplotlib 画矩形的三种方式分析
Oct 31 Python
Python调用C语言程序方法解析
Jul 07 Python
Python3如何使用多线程升程序运行速度
Aug 11 Python
Python 下载Bing壁纸的示例
Sep 29 Python
python程序的组织结构详解
Dec 06 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+mysql数据库实现无限分类的方法
2014/12/12 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
jquery应用实例分享_实现手风琴特效
2018/02/01 jQuery
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Django实现组合搜索的方法示例
2018/01/23 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
python迭代器常见用法实例分析
2019/11/22 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
《他得的红圈圈最多》教学反思
2014/04/24 职场文书
营销团队口号
2014/06/06 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
高三生物教学反思
2016/02/22 职场文书
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android
详解Redis的三种常用的缓存读写策略步骤
2022/05/06 Redis