详解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批量提取word内信息
Aug 09 Python
python 3利用Dlib 19.7实现摄像头人脸检测特征点标定
Feb 26 Python
python时间日期函数与利用pandas进行时间序列处理详解
Mar 13 Python
示例详解Python3 or Python2 两者之间的差异
Aug 23 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
Mar 14 Python
python基于pdfminer库提取pdf文字代码实例
Aug 15 Python
详解python列表(list)的使用技巧及高级操作
Aug 15 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 Python
python 导入数据及作图的实现
Dec 03 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
Feb 16 Python
如何用Python和JS实现的Web SSH工具
Feb 23 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
类的另类用法--数据的封装
2006/10/09 PHP
IIS下配置Php+Mysql+zend的图文教程
2006/12/08 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
利用onresize使得div可以随着屏幕大小而自适应的代码
2010/01/15 Javascript
基于原生JS实现图片裁剪
2016/08/01 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
matplotlib中legend位置调整解析
2017/12/19 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
python高阶爬虫实战分析
2018/07/29 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Python字符串对象实现原理详解
2019/07/01 Python
Python守护进程实现过程详解
2020/02/10 Python
Python3 io文本及原始流I/O工具用法详解
2020/03/23 Python
python实现梯度法 python最速下降法
2020/03/24 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
保安拾金不昧表扬信
2014/01/15 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
房屋租房协议书范本
2014/12/04 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
民事上诉状范文
2015/05/22 职场文书
楚门的世界观后感
2015/06/03 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
关于python爬虫应用urllib库作用分析
2021/09/04 Python
python 多态 协议 鸭子类型详解
2021/11/27 Python