笔记||Pyhton3进阶之多线程原理
# 多线程
# 一个进程相当于一个或多个线程
# 当没有多线程编程时,一个进程也是一个主线程
# 但有多线程编程时,一个进程包含多个线程,包括主线程
# 使用线程 可以实现程序的并发
# python3中多多线程支持的是threading模块
# import threading
# 在python3中,可以通过两种方法来创建线程
'''
两种方法:
① 使用threading.Thread直接在线程中运行函数(调用Thread类的构造器创建线程)。
target参数:传入一个函数对象(函数名);
args参数:传入一个元组,作为目标函数的入参;
步骤如下:
1 - 调用Thread类的构造器创建线程对象,在创建对象时,target参数指定的函数将作为线程执行体
2 - 调用线程对象的star()方法启动该线程
② 继承Thread类创建线程类。
步骤如下:
1 - 定义Thread类的子类,并重写该类的run()方法,run()方法的方法体就代表了线程需要完成的任务,因此把run()方法称为线程执行体
2 - 创建Thread子类的实例,即创建线程对象
3 -调用线程对象的star()方法来启动线程
推荐使用第一种方式来创建线程,这种方式编程简单,线程直接包装target函数,具有更清晰的逻辑结构
'''
# 如何获取主线程的名称
# threading.current_thread().getName()
# 线程的调度方式
# start方法 启动线程
# join方法 等待线程
import threading
import time
def thread_run(name):
time.sleep(2)
print("%s first thread!!!" % name)
t1 = threading.Thread(target=thread_run, args=('peiyanan', ))
t2 = threading.Thread(target=thread_run, args=('tanyongling', ))
t1.start()
t2.start()
t1.setName('子线程1') # 设置线程的名称name
print(t1.name) # 打印线程名
print(t1.getName()) # 获取线程名称
print(t1.is_alive()) # isalive()方法用于判断线程是否运行 未运行会显示False
# t1.join()
# t2.join()
# print('主线程正在运行!!')
# -------------------------------------------------------
# 如何优雅的使用多线程
# 可以使用for循环来控制创建线程的数量
# menu = ['数学', '英语', '语文', '地理', '历史']
# for m in menu:
# t = threading.Thread(target=thread_run, args=(m, 2))
# t.start()
# 线程调度
# 操作系统不会让一个线程一直占用CPU的
# 线程的生命周期
'''
四个状态:
①新建状态 指该线程已经初始化,但还没启动
②运行状态 指线程的正常执行状态
③阻塞状态 指线程处于执行状态,但由于没有获得CPU的执行时间,而处在CPU外部等待线程执行的状态
④死亡状态 指线程执行结束
'''
# 使用线程需要注意到的点
'''
线程独有的资源
调用的函数局部变量,线程都会有个自己的拷贝
不会冲突
线程有时会给开发上带来麻烦:如 共享数据的访问,比如全局变量
'''
笔记||Pyhton3进阶之多线程原理的更多相关文章
- 笔记||Pyhthon3进阶之多线程操作共享数据
# 多线程操作共享数据--------------------------------------------------------------- # import threading# 使用锁# ...
- [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)
[.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上) 本节导读: 随着硬件和网络的高速发展,为多线程(Multithreading) ...
- 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...
- [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)
[.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...
- [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)
[.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中) 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET ...
- 【转载】COM多线程原理与应用
原文:COM多线程原理与应用 目录: COM多线程原理与应用 目录: 前言: 套间: 套间的定义: 套间的分类: 套间的进入和退出: 对象的同步: 组件对象的同步: COM对象线程模型: 进程内对象线 ...
- Struts2进阶(一)运行原理及搭建步骤
Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...
- Django学习笔记(进阶篇)
Django学习笔记(进阶篇):http://www.cnblogs.com/wupeiqi/articles/5246483.html
- Python多线程原理与实现
Date: 2019-06-04 Author: Sun Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了解线程池的使用 1 线程基本 ...
随机推荐
- leetcode929 Unique Email Addresses
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- Spring_002 依赖注入方式实现
继续写我们的第一个Spring程序,这次我们使用依赖注入的方式实现程序 第一步,建立我们的Spring_002程序,并在程序中添加BookDao.java.BookDaoImpl.java.BookS ...
- tab 切换 和 BottomNavigationBar 自定义 底部导航条
BottomNavigationBar 组件 BottomNavigationBar 是底部导航条,可以让我们定义底部 Tab 切换,bottomNavigationBar是 Scaffold ...
- 【MySQL】数据类型之数字相关
" 目录 #. 数值类型 1. 数值范围验证 /. 有符号 /. 无符号 2. int类型显示长度验证 #. 浮点型 1. 验证 /. 建表 /. 精度 #. 日期类型 1. 验证 /. y ...
- HDU 1016 素数环(dfs + 回溯)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 一道很典型的dfs+回溯: 根据题意首先进行初始化,即第一个位置为1,然后进行dfs, ...
- 关于GOM引擎启动时显示:windows socket error: 在其上下文中,该请求的地址无效。 (10049), on API 'bind'
GOM启动时网管登陆器显示:windows socket error: 在其上下文中,该请求的地址无效. (10049), on API 'bind'解决方法: 重新配置引擎控制台.在配置里取消双IP ...
- Fluent_Python_Part4面向对象,11-iface-abc,协议(接口),抽象基类
第四部分第11章,接口:从协议到抽象基类(重点讲抽象基类) 接口就是实现特定角色的方法集合. 严格来说,协议是非正式的接口(只由文档约束),正式接口会施加限制(抽象基类对接口一致性的强制). 在Pyt ...
- Nexus-vPC和STP BPDU
1.为了交互vPC拓扑,STP机制被修改适应到vPC peer环境.2.对于vPC ports,只有主角色运行STP,换句话说,vPC下的STP由主角色设备控制.3.只有主角色设备在DP(指定端口)上 ...
- IKAnalyzer使用
1.分析器 所有分析器最终继承的类都是Analyzer 1.1 默认标准分析器:StandardAnalyzer 在我们创建索引的时候,我们使用到了IndexWriterConfig对象,在我们创建索 ...
- pip-9.0.1更新到pip-10.0.1遇到的问题
使用 pip 安装第三方库时,报错: You are using pip version 9.0.3, however version 10.0.1 is available. You should ...