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文件操作之合并文本文件内容示例代码
Sep 19 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
Python中整数的缓存机制讲解
Feb 16 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
Django基础知识 web框架的本质详解
Jul 18 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
Django Admin后台添加数据库视图过程解析
Apr 01 Python
使用Keras中的ImageDataGenerator进行批次读图方式
Jun 17 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 Python
python实现按日期归档文件
Jan 30 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
php学习笔记之 函数声明
2011/06/09 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
PDO实现学生管理系统
2020/03/21 PHP
js获取对象为null的解决方法
2013/11/21 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
使用Ajax与服务器(JSON)通信实例
2016/11/04 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
Python中实现参数类型检查的简单方法
2015/04/21 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
python 画图 图例自由定义方式
2020/04/17 Python
django orm模块中的 is_delete用法
2020/05/20 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
一套PHP的笔试题
2013/05/31 面试题
音乐教学案例
2014/01/30 职场文书
爱我中华演讲稿
2014/05/20 职场文书
小学体育教学随笔
2015/08/14 职场文书
学术会议开幕词
2016/03/03 职场文书
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers