# 多线程

# 一个进程相当于一个或多个线程

# 当没有多线程编程时,一个进程也是一个主线程

# 但有多线程编程时,一个进程包含多个线程,包括主线程

# 使用线程 可以实现程序的并发

# 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进阶之多线程原理的更多相关文章

  1. 笔记||Pyhthon3进阶之多线程操作共享数据

    # 多线程操作共享数据--------------------------------------------------------------- # import threading# 使用锁# ...

  2. [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)

    [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上) 本节导读: 随着硬件和网络的高速发展,为多线程(Multithreading) ...

  3. 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...

  4. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  5. [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)

    [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中) 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET ...

  6. 【转载】COM多线程原理与应用

    原文:COM多线程原理与应用 目录: COM多线程原理与应用 目录: 前言: 套间: 套间的定义: 套间的分类: 套间的进入和退出: 对象的同步: 组件对象的同步: COM对象线程模型: 进程内对象线 ...

  7. Struts2进阶(一)运行原理及搭建步骤

    Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...

  8. Django学习笔记(进阶篇)

    Django学习笔记(进阶篇):http://www.cnblogs.com/wupeiqi/articles/5246483.html

  9. Python多线程原理与实现

    Date: 2019-06-04 Author: Sun Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了解线程池的使用 1 线程基本 ...

随机推荐

  1. spring框架相关概念

    软件行业的二八法则?技术中只有20%是最常用和最关键的,决定你的基础,后面的80%决定你的潜能! 概念: 1,轻量级框架,用户需要什么功能就自己添加相应的功能模块,不像重量级框架,一旦用,所有功能都添 ...

  2. dp(武功秘籍)

    众所周知,太吾绘卷是非常爱(niu)你(bi)的国产武侠游戏,里面有一个继承系统,当你死后可以在你的子孙中挑选一个继承人,用他的人物继续进行游戏.当你挑选继承人的时候一定会挑选能力最强,天赋最高的那一 ...

  3. fiddler的代理设置

    fiddler通过监听系统的8888端口实现对系统浏览器发出的http报文进行截获监听,因此要使fiddler能够监听到浏览器数据,需要对浏览器设置代理端口 浏览器 <--8888端口代理--& ...

  4. windows maven配置

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  5. Windows server 2012 R2 服务器用户自动锁定

    开启共享文件夹后,发现经常会自动锁定导致,共享用户无法正常访问共享文件夹(原因不明) 解决办法,打开本地安全策略 把账户锁定阈值改为0

  6. 微信公众平台接口获取时间戳为10位,java开发需转为13位

    问题1:为什么会生成13位的时间戳,13位的时间戳和10时间戳分别是怎么来的 ? java的date默认精度是毫秒,也就是说生成的时间戳就是13位的,而像c++或者php生成的时间戳默认就是10位的, ...

  7. 《JavaScript高级程序设计》读书笔记(三)基本概念第四小节 操作符

    内容---语法 上一小节---数据类型 本小节 操作符---流程控制语句---理解函数 操作符--操作数据值的操作符--算术(如加减).位操作符.关系.相等--ECMAScript操作符可以适用于很多 ...

  8. python应用-pycharm新建模板默认添加shebang编码作者时间等信息

    1.pycharm4.5激活码 用户名: yueting3527 注册码: ===== LICENSE BEGIN ===== 93347-12042010 00001FMHemWIs"6w ...

  9. Docker安装部署ELK教程(Elasticsearch+Kibana+Logstash+Filebeat)

    Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash 是一个完全开 ...

  10. Go语言学习笔记(四)

    一.字符串 1.字符串截取 可以使用len(字符串变量)获取字符串的字节长度,其中英文占1个字节长度,中文占用3个字节长度 可以使用变量名[n]获取到字符串第n+1个字节,返回这个字节对应的Unico ...