python线程池threadpool使用篇


Posted in Python onApril 27, 2018

最近在做一个视频设备管理的项目,设备包括(摄像机,DVR,NVR等),包括设备信息补全,设备状态推送,设备流地址推送等,如果同时导入的设备数量较多,如果使用单线程进行设备检测,那么由于设备数量较多,会带来较大的延时,因此考虑多线程处理此问题。

可以使用python语言自己实现线程池,或者可以使用第三方包threadpool线程池包,本主题主要介绍threadpool的使用以及其里面的具体实现。

1、安装

使用安装:

pip installthreadpool

2、使用

    (1)引入threadpool模块
    (2)定义线程函数
    (3)创建线程 池threadpool.ThreadPool()
    (4)创建需要线程池处理的任务即threadpool.makeRequests()
    (5)将创建的多个任务put到线程池中,threadpool.putRequest
    (6)等到所有任务处理完毕theadpool.pool()

import threadpool 
def ThreadFun(arg1,arg2): 
 pass 
def main(): 
 device_list=[object1,object2,object3......,objectn]#需要处理的设备个数 
 task_pool=threadpool.ThreadPool(8)#8是线程池中线程的个数 
 request_list=[]#存放任务列表 
 #首先构造任务列表 
 for device in device_list: 
 request_list.append(threadpool.makeRequests(ThreadFun,[((device, ), {})])) 
 #将每个任务放到线程池中,等待线程池中线程各自读取任务,然后进行处理,使用了map函数,不了解的可以去了解一下。 
 map(task_pool.putRequest,request_list) 
 #等待所有任务处理完成,则返回,如果没有处理完,则一直阻塞 
 task_pool.poll() 
if __name__=="__main__": 
 main()

上面就是一个具体的线程池的使用流程
threadpool具体的定义如下:

class ThreadPool: 
 """A thread pool, distributing work requests and collecting results. 
 
 See the module docstring for more information. 
 
 """ 
 def __init__(self, num_workers, q_size=0, resq_size=0, poll_timeout=5): 
 pass 
 def createWorkers(self, num_workers, poll_timeout=5): 
 pass 
 def dismissWorkers(self, num_workers, do_join=False): 
 pass 
 def joinAllDismissedWorkers(self): 
 pass 
 def putRequest(self, request, block=True, timeout=None): 
 pass 
 def poll(self, block=False): 
 pass 
 def wait(self): 
 pass

下一节会详细介绍上面的整个流程以及每个函数:python 线程池threadpool(实现篇)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
编写多线程Python服务器 最适合基础
Sep 14 Python
对Python3使运行暂停的方法详解
Feb 18 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
Dec 27 Python
python设置代理和添加镜像源的方法
Feb 14 Python
python图形界面开发之wxPython树控件使用方法详解
Feb 24 Python
Python实现转换图片背景颜色代码
Apr 30 Python
next在python中返回迭代器的实例方法
Dec 15 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 #Python
python中yaml配置文件模块的使用详解
Apr 27 #Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 #Python
python中subprocess批量执行linux命令
Apr 27 #Python
python复制文件到指定目录的实例
Apr 27 #Python
Python多进程multiprocessing.Pool类详解
Apr 27 #Python
python获取程序执行文件路径的方法(推荐)
Apr 26 #Python
You might like
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
深入解析php之apc
2013/05/15 PHP
基于empty函数的输出详解
2013/06/17 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
phplot生成图片类用法详解
2015/01/06 PHP
WordPress后台中实现图片上传功能的实例讲解
2016/01/11 PHP
通过javascript设置css属性的代码
2009/12/28 Javascript
js模拟类继承小例子
2010/07/17 Javascript
jquery解决图片路径不存在执行替换路径
2013/02/06 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
js charAt的使用示例
2014/02/18 Javascript
用js替换除数字与逗号以外的所有字符的代码
2014/06/07 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
2016/01/27 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
[51:53]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第二场 1月24日
2021/03/11 DOTA
Python实现从订阅源下载图片的方法
2015/03/11 Python
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
TensorFlow的权值更新方法
2018/06/14 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
手术室护士长竞聘书
2014/03/31 职场文书
女生抽烟检讨书
2014/10/05 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Python中递归以及递归遍历目录详解
2021/10/24 Python