Python定时器线程池原理详解


Posted in Python onFebruary 26, 2020

这篇文章主要介绍了Python定时器线程池原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

定时器执行循环任务:

知识储备

Timer(interval, function, args=None, kwargs=None)

interval ===》 时间间隔 单位为s

function ===》 定制执行的函数

使用threading的 Timer 类

start() 为通用的开始执行方法

cancel ()为取消执行的方法

普通单次定时执行

from threading import Timer
import time
# 普通单次定时器
def handle():
print("普通单次定时器 函数被执行");
t1=Timer(interval=1,function=handle);
t1.start();

定时循环执行

from threading import Timer
import time
# 循环定时器
def loop_handle():
print("循环定时器定时器 函数被执行");
global t2;
t2=Timer(interval=1,function=loop_handle);
t2.start();
 
t2=Timer(interval=1,function=loop_handle);
t2.start();
 
time.sleep(5);# 对主线程停止5s;
t2.cancel(); # t2 在主main 线程阻塞5s t2执行5s

线程池技术

基本概念

在程序启动时就创建好若干个线程,并保存到内存中 。 当线程启动并执行完成之后,并不做销毁处理,而是等待下次再使用。

i:节约了创建进程 销毁进程的时间,大大降低进程的开销

实现

抢占式:线程池中的线程执行顺序不固定。该方式使用 ThreadPoolExecutor的 submit ()方法实现。

具体执行那个线程是随机的, 并且执行的函数也可以不一致

那个线程执行的函数出现了崩溃,不影响整个线程池的其他线程的运行

使用with 语法 进行简化操作

非抢占式:线程将按照调用的顺序执行 。 此方式使用 ThreadPoolExecutor 的 map ()方法来实现

每个线程处理的函数都是一致的,一个线程执行的函数崩溃,整体就崩溃

基本code

from concurrent.futures import ThreadPoolExecutor # 导入线程池
import time
def printName(name):
print("名字",name);
time.sleep(2);
nameList=['Tom','jirl','steam'];
# 抢占式线程池
start2=time.time();
with ThreadPoolExecutor(3) as executor:
for i in nameList:# 因为每次执行的函数不一致,所以参数要分开传递
executor.submit(printName,i); 
end2=time.time();
print("2 speed:",str(end2-start2));
#非抢占式线程池

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python远程桌面协议RDPY安装使用介绍
Apr 15 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
python各种语言间时间的转化实现代码
Mar 23 Python
Python实现堆排序的方法详解
May 03 Python
Python实现的knn算法示例
Jun 14 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
Python使用Pandas库常见操作详解
Jan 16 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
Oct 15 Python
python 简单的调用有道翻译
Nov 25 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
Feb 26 #Python
Python列表解析操作实例总结
Feb 26 #Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 #Python
python实现低通滤波器代码
Feb 26 #Python
Python解释器及PyCharm工具安装过程
Feb 26 #Python
Python基础之列表常见操作经典实例详解
Feb 26 #Python
Python TKinter如何自动关闭主窗口
Feb 26 #Python
You might like
定义php常量的详解
2013/06/09 PHP
PHP开发框架kohana3 自定义路由设置示例
2014/07/14 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
基于Jquery插件开发之图片放大镜效果(仿淘宝)
2011/11/19 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python下rrdtool模块的基本使用方法
2015/11/13 Python
python编程实现希尔排序
2017/04/13 Python
解决python3 urllib 链接中有中文的问题
2018/07/16 Python
numpy基础教程之np.linalg
2019/02/12 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
三星新西兰官网:Samsung新西兰
2019/03/05 全球购物
学习党课思想汇报
2013/12/29 职场文书
高中化学教学反思
2014/01/13 职场文书
青年志愿者活动总结
2014/04/26 职场文书
525心理健康活动总结
2015/05/08 职场文书
培训心得体会怎么写
2016/01/25 职场文书