Python threading模块
时间:2019-06-14
本文章向大家介绍Python threading模块,主要包括Python threading模块使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
threading模块是Python里面常用的线程模块。提高处理任务的效率
进程和线程的区别:
进程:
优点:同时利用多个CPU,能够同时进行多个操作
缺点:耗费资源(重新开辟内存空间)
线程:
优点:共享内存,io操作时候,创造并发操作
缺点:抢占资源
进程不是越多越好,一般CPU个数=进程个数
线程也不是越多越好,请求上下文切换耗时
计算机执行任务的最小单元:线程
threading创建多个线程,但是是快速切换的(由于GIL锁的存在)
例:
#!/usr/bin/env python# -*- coding: utf-8 -*-import datetimeimport timeimport threadingdef backup(backup_number_per,backup_server_ip,check_time_period):time.sleep(2)print(backup_number_per,backup_server_ip,check_time_period)current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')# 统计备份策略表里所有的目标备份机,然后每个线程用一个备份机进行备份backup_server_ip_list = ['172.10.10.1','172.10.10.2','172.10.10.3']thread_list = [] #线程存放列表backup_number_per=3 # 每次最多备份几个DBcheck_time_period=10for backup_server_ip in backup_server_ip_list:print 'starting Thread backup to %s' % (backup_server_ip)t =threading.Thread(target=backup,args=(backup_number_per,backup_server_ip,check_time_period,))t.setDaemon(True)thread_list.append(t)for t in thread_list:t.start()for t in thread_list:t.join()print current_time+' All Backup Finish!!!'结果:在线程里,经常会用到setDaemon()和join()方法。1)setDaemon()方法理解:主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(),这个意思是把主线程A设置为守护进程,这时候,要是A执行结束了,不管B是否完成,一并和A退出。必选在start()方法调用之前设置,如果不设置为守护进程,程序会被无限挂起,只有等待了所有线程结束它才结束。2)join()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法,join([timeout])里边的参数是可选的,代表线程运行最大时间,如果超过这个时间,不管此线程是否执行完毕都会被回收,然后主线程或函数都会接着执行的,如果线程执行时间小于参数表示的时间,则接着执行,不用一定要等到参数表示的时间
原文地址:https://www.cnblogs.com/DBA-3306/p/11020705.html
- 防止在训练模型时信息丢失 用于TensorFlow、Keras和PyTorch的检查点教程
- 帝国cms如何调用栏目别名作为分类标题?[!--classname--]标签不能用
- 高级软件工程师(面试题)
- 高级软件工程师 2016-9月更新
- Httpclient 调用 HTTPS 加密通道的Restful服务
- 使用 Jersey 调用 Restful 服务
- 【学术】将吴恩达的第一个深度神经网络应用于泰坦尼克生存数据集
- 使用 HttpClient 调用 Restful 接口
- 元宵佳节:看Oracle技术粉们用SQL画团圆
- java 脚本引擎
- 不怕学不会 使用TensorFlow从零开始构建卷积神经网络
- 微信公众平台增加批量获取用户基本信息接口
- 谈网络适配器
- 【框架】为降低机器学习开发者门槛,苹果发布了Turi Create框架
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 机器学习4个常用超参数调试方法!
- 总结:DCIC算法分析赛完整方案分享!
- 提高微服务安全性的11个方法
- nmap
- MSF基础与应用
- Windows系统组件漏洞
- 【风险通告】FastAdmin会员中心Getshell漏洞
- Azure Cosmos DB介绍及演示
- 从一次编译出发梳理概念: Jetty,Jersey,hk2,glassFish,Javax,Jakarta
- 《一起学sentinel》一、一起搭建sentinel服务
- InfluxDB和Grafana实现传感器数据的存储和可视化
- 样本相关性分析
- Android 序列化 Serializable与Parcelable
- 《一起学sentinel》二、初探sentinel的Slot
- Redis突然报错,今晚又不能回家了...