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中zip()方法应用实例分析
Apr 16 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
Python协程的用法和例子详解
Sep 09 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
对pandas中to_dict的用法详解
Jun 05 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
如何在python中写hive脚本
Nov 08 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
Jun 28 Python
pandas to_excel 添加颜色操作
Jul 14 Python
Python用SSH连接到网络设备
Feb 18 Python
Python获取指定日期是"星期几"的6种方法
Mar 13 Python
Python实现文字pdf转换图片pdf效果
Apr 03 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防注入安全代码
2008/04/09 PHP
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
php实现的xml操作类
2016/01/15 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
JSQL  一个 web DB 的封装
2010/05/05 Javascript
Js从头学起(基本数据类型和引用类型的参数传递详细分析)
2012/02/16 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
easyui form validate总是返回false的原因及解决方法
2016/11/07 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
python 计算文件的md5值实例
2017/01/13 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
python pandas获取csv指定行 列的操作方法
2019/07/12 Python
wxPython多个窗口的基本结构
2019/11/19 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
网络维护管理员的自我评价分享
2013/11/11 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
升学宴来宾致辞
2015/07/27 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
python 网络编程要点总结
2021/06/18 Python