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 文件和路径操作函数小结
Nov 23 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
python逆序打印各位数字的方法
Jun 25 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
python里运用私有属性和方法总结
Jul 08 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
Win10环境中如何实现python2和python3并存
Jul 20 Python
Python3爬虫中关于中文分词的详解
Jul 29 Python
python 代码运行时间获取方式详解
Sep 18 Python
Python绘制数码晶体管日期
Feb 19 Python
如何在Python中创建二叉树
Mar 30 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制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php字符串函数学习之substr()
2015/03/27 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
理解Javascript_09_Function与Object
2010/10/16 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
jQuery中DOM树操作之复制元素的方法
2015/01/23 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
12 种使用Vue 的最佳做法
2020/03/30 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
python实现计算资源图标crc值的方法
2014/10/05 Python
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
用Python计算三角函数之atan()方法的使用
2015/05/15 Python
python编程使用selenium模拟登陆淘宝实例代码
2018/01/25 Python
Python之列表实现栈的工作功能
2019/01/28 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
生产操作工岗位职责
2014/09/16 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技