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 PIL模块与随机生成中文验证码
Feb 27 Python
简述:我为什么选择Python而不是Matlab和R语言
Nov 14 Python
VSCode下好用的Python插件及配置
Apr 06 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
Python assert语句的简单使用示例
Jul 28 Python
如何在Django配置文件里配置session链接
Aug 06 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
python 双循环遍历list 变量判断代码
May 04 Python
tensorflow转换ckpt为savermodel模型的实现
May 25 Python
Jmeter HTTPS接口测试证书导入过程图解
Jul 22 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 地址栏信息的获取代码
2009/01/07 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
浅析php单例模式
2014/11/25 PHP
php getcwd与dirname(__FILE__)区别详解
2016/09/24 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
Firefox中beforeunload事件的实现缺陷浅析
2012/05/03 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
javascript生成大小写字母
2015/07/03 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
Vue 递归多级菜单的实例代码
2019/05/05 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
python psutil库安装教程
2018/03/19 Python
python代码过长的换行方法
2018/07/19 Python
python实现简单登陆系统
2018/10/18 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
Python常用特殊方法实例总结
2019/03/22 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
Jar包的作用是什么
2014/03/30 面试题
迟到检讨书500字
2014/02/05 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书