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 相关文章推荐
Linux下用Python脚本监控目录变化代码分享
May 21 Python
Python实现字典的key和values的交换
Aug 04 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
使用python实现链表操作
Jan 26 Python
cmd运行python文件时对结果进行保存的方法
May 16 Python
对python中的乘法dot和对应分量相乘multiply详解
Nov 14 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
一篇文章弄懂Python中的内建函数
Aug 07 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 新手入门
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
js模拟微博发布消息
2017/02/23 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
Django之模板层的实现代码
2019/09/09 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
Python 支持向量机分类器的实现
2020/01/15 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
python扫描线填充算法详解
2020/02/19 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
高中升旗仪式演讲稿
2014/09/09 职场文书
2014年收银工作总结
2014/11/13 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
利用 JavaScript 构建命令行应用
2021/11/17 Javascript