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使用random和tertools模块解一些经典概率问题
Jan 28 Python
在Python程序中操作文件之isatty()方法的使用教程
May 24 Python
python 网络爬虫初级实现代码
Feb 27 Python
Python的标准模块包json详解
Mar 13 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 Python
基于Python采集爬取微信公众号历史数据
Nov 27 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 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求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
js验证上传图片的方法
2015/05/12 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
javascript实现去除HTML标签的方法
2016/12/26 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
Python中文编码那些事
2014/06/25 Python
Python+django实现简单的文件上传
2016/08/17 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
python绘制双柱形图代码实例
2017/12/14 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
Python开发.exe小工具的详细步骤
2021/01/27 Python
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
开业庆典主持词
2014/03/21 职场文书
奠基仪式策划方案
2014/05/15 职场文书
农民工讨薪标语
2014/06/26 职场文书
工作会议简报
2015/07/20 职场文书
初中美术教学反思
2016/02/17 职场文书
详解MySQL的内连接和外连接
2023/05/08 MySQL