详解Python并发编程之创建多线程的几种方法


Posted in Python onAugust 23, 2019

大家好,并发编程 今天开始进入第二篇。

今天的内容会比较基础,主要是为了让新手也能无障碍地阅读,所以还是要再巩固下基础。学完了基础,你们也就能很顺畅地跟着我的思路理解以后的文章。

本文目录

  • 学会使用函数创建多线程
  • 学会使用类创建多线程
  • 多线程:必学函数讲解

经过总结,Python创建多线程主要有如下两种方法:

  • 函数

接下来,我们就来揭开多线程的神秘面纱。

. 学会使用函数创建多线程

在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。

threading.Thread() 一般接收两个参数:

  • 线程函数名:要放置线程让其后台执行的函数,由我们自已定义,注意不要加();
  • 线程函数的参数:线程函数名所需的参数,以元组的形式传入。若不需要参数,可以不指定。

举个例子

import time
 from threading import Thread
 
 # 自定义线程函数。
 def main(name="Python"):
   for i in range(2):
     print("hello", name)
     time.sleep(1)
# 创建线程01,不指定参数
thread_01 = Thread(target=main)
# 启动线程01
thread_01.start()


# 创建线程02,指定参数,注意逗号
thread_02 = Thread(target=main, args=("MING",))
# 启动线程02
thread_02.start()

可以看到输出

hello Python
hello MING
hello Python
hello MING

是不是超级简单呢?别急,下面也是一样简单。

. 学会使用类创建多线程

相比较函数而言,使用类创建线程,会比较麻烦一点。

首先,我们要自定义一个类,对于这个类有两点要求,

  • 必须继承 threading.Thread 这个父类;
  • 必须覆写 run 方法。

这里的 run 方法,和我们上面线程函数的性质是一样的,可以写我们的业务逻辑程序。在 start() 后将会调用。

来看一下例子

为了方便对比,run函数我复用上面的main。

import time
 from threading import Thread
 
 class MyThread(Thread):
   def __init__(self, name="Python"):
     # 注意,super().__init__() 一定要写
     # 而且要写在最前面,否则会报错。
     super().__init__()
     self.name=name

  def run(self):
    for i in range(2):
      print("hello", self.name)
      time.sleep(1)

if __name__ == '__main__':
  # 创建线程01,不指定参数
  thread_01 = MyThread()
  # 创建线程02,指定参数
  thread_02 = MyThread("MING")

  thread_01.start()
  thread_02.start()

当然结果也是一样的。

hello Python
hello MING
hello Python
hello MING

. 多线程:必学函数讲解

学完了两种创建线程的方式,你一定会惊叹,咋么这么简单,一点难度都没有。

其实不然,上面我们的线程函数 为了方便理解,都使用的最简单的代码逻辑。而在实际使用当中,多线程运行期间,还会出现诸多问题,只是我们现在还没体会到它的复杂而已。

不过,你也不必担心,在后面的章节中,我会带着大家一起来探讨一下,都有哪些难题,应该如何解决。

磨刀不误吹柴工,我们首先得来认识一下,Python给我们提供的 Thread 都有哪些函数和属性,实现哪些功能。学习完这些,在后期的学习中,我们才能更加得以应手。

经过我的总结,大约常用的方法有如下这些:

t=Thread(target=func)
 
 # 启动子线程
 t.start()
 
 # 阻塞子线程,待子线程结束后,再往下执行
 t.join()
 
 # 判断线程是否在执行状态,在执行返回True,否则返回False
t.is_alive()
t.isAlive()

# 设置线程是否随主线程退出而退出,默认为False
t.daemon = True
t.daemon = False

# 设置线程名
t.name = "My-Thread"

好了,Python线程基础知识,我们大概都介绍完了。

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

Python 相关文章推荐
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
Python网络编程中urllib2模块的用法总结
Jul 12 Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 Python
Python切换pip安装源的方法详解
Nov 18 Python
Python实现脚本锁功能(同时只能执行一个脚本)
May 10 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
Python实现快速傅里叶变换的方法(FFT)
Jul 21 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
python快速编写单行注释多行注释的方法
Jul 31 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
宝塔面板成功部署Django项目流程(图文)
Jun 22 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 #Python
python Kmeans算法原理深入解析
Aug 23 #Python
Python高级特性 切片 迭代解析
Aug 23 #Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 #Python
Python 调用 Windows API COM 新法
Aug 22 #Python
详解Python文件修改的两种方式
Aug 22 #Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 #Python
You might like
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
jQuery实现的导航条切换可显示隐藏
2014/10/22 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
拖动时防止选中
2017/02/03 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
JS随机数产生代码分享
2018/02/24 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
pytorch进行上采样的种类实例
2020/02/18 Python
python 一维二维插值实例
2020/04/22 Python
Scrapy模拟登录赶集网的实现代码
2020/07/07 Python
如何表示python中的相对路径
2020/07/08 Python
python 实现Harris角点检测算法
2020/12/11 Python
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
师德师风剖析材料
2014/09/30 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫