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 相关文章推荐
python中stdout输出不缓存的设置方法
May 29 Python
Python中Django框架利用url来控制登录的方法
Jul 25 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
python实现守护进程、守护线程、守护非守护并行
May 05 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
python环境路径配置以及命令行运行脚本
Apr 02 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
python3.7添加dlib模块的方法
Jul 01 Python
python Pexpect模块的使用
Dec 25 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正则表达式(regar expression)
2011/09/10 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
用javascript实现自定义标签
2007/05/08 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
解决ant Design中Select设置initialValue时的大坑
2020/10/29 Javascript
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
python实现进程间通信简单实例
2014/07/23 Python
python使用RNN实现文本分类
2018/05/24 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python实现TCP文件传输
2020/03/20 Python
python和php哪个容易学
2020/06/19 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
晚归检讨书
2014/02/19 职场文书
军训教官感言
2014/03/02 职场文书
物流管理专业推荐信
2014/09/06 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
庭外和解协议书
2016/03/23 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
Oracle用户管理及赋权
2022/04/24 Oracle