最近在做一个视频设备管理的项目,设备包括(摄像机,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线程池(threadpool)模块使用笔记详解相关推荐

  1. python中subplot是什么意思_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

  2. python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...

  3. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  4. python中列表的sort方法_python中列表的sort方法使用详解

    内容简介:python中列表的sort方法使用详解 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符 ...

  5. python中seek(10、1)_Python中index()和seek()的用法(详解)

    1.index() 一般用处是在序列中检索参数并返回第一次出现的索引,没找到就会报错,比如: >>> t=tuple('Allen') >>> t ('A', 'l ...

  6. python中update是啥意思_python中update的基本使用方法详解

    前言 Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法格式 d.update(e) 参数说明 将e中键-值对添加到字典 ...

  7. python安装pip配置安装源_Python切换pip安装源的方法详解

    一.pip简介 Pip 是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能. Pip 是对easy_install的取代,提供了和easy_install相同的查找包的 ...

  8. python 获取路径的盘符_python获取磁盘号下盘符步骤详解

    这次主要教的是如何通过Python 获取Windows系统下的所有的磁盘盘符,以列表的形式展示出来,获取磁盘号下的盘符包括能够获取到我们正在插在电脑上的U盘,也可以读取到,希望能够对你们在学习过程中有 ...

  9. python计算平方用map函数_python的map函数的使用方法详解以及使用案例(处理每个元素的自增、自减、平方等)...

    1.用我们之前学过的求一下平方(只有一个列表) #求平方 num=[1,5,6,2,7,8] a=[]for n innum: a.append(n**2)print(a) C:python35pyt ...

最新文章

  1. 下载SpringJar包
  2. java父类转换成子类_【转】java 父类与子类的转换
  3. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车指定花式动作
  4. Qt 独立运行时伴随CMD命令窗口
  5. 《JavaScript》高级程序设计---第3章
  6. Hibernate 逆向工程生成POJO类和映射文件
  7. ORACLE DATAGUARD 数据库---创建逻辑备用数据库
  8. 计算机病毒教学评课,计算机病毒评课稿.docx
  9. VSCode调试JavaScript代码方法
  10. 欧盟ETSI关于汽车雷达的规定
  11. 计算机12点自动关机,电脑怎么设置定时自动关机命令 电脑设置定时关机方法【图文】...
  12. 如何用计算机弹奏纸短情长,纸短情长计算器谱
  13. chapter1 静态分析技术-09资源节查看 resource hacker
  14. 动漫Hello World
  15. Github Markdown 指定图片在光亮或暗黑模式展示
  16. 独立开发变现周刊(第44期):12岁的小男孩在9个小时内NFT卖了40万美元!
  17. PTF渗透测试框架使用
  18. matlab三点确定抛物线,[转]matlab编写的进退法,黄金分割法,抛物线法(二次插值法),wolfe不精确一维搜索...
  19. android用什么字体,关于 Android 默认字体以及对比微软雅黑字体
  20. Java Web程序设计第12章课后第1题

热门文章

  1. cclink 和发那科机器人_FANUC机器人焊枪工具坐标系设定
  2. 作者:刘昂(1990-),男,中国科学院计算机网络信息中心工程师
  3. 【Python】Matplotlib绘制散点图
  4. 【Python】Python中的关键字
  5. 解读Mybatis数据库开发框架
  6. Reactor和Proactor对比以及优缺点 (netty的底层原理reactor模型)
  7. C++学习笔记系列三
  8. java拦截器(interceptor)
  9. Golang面试题解析(五)
  10. HTML5 兼容IE浏览器