详解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各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
python框架中flask知识点总结
Aug 17 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
Django中使用MySQL5.5的教程
Dec 18 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
利用Python计算KS的实例详解
Mar 03 Python
用Python生成HTML表格的方法示例
Mar 06 Python
Django如何使用jwt获取用户信息
Apr 21 Python
python从Oracle读取数据生成图表
Oct 14 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 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中的curl_multi系列函数使用例子
2014/07/29 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
降低PHP Redis内存占用
2017/03/23 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
js图片上传的封装代码
2017/08/01 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
[49:08]Secret vs VP 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python六大开源框架对比
2015/10/19 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
Python爬虫实现selenium处理iframe作用域问题
2021/01/27 Python
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
见习期自我鉴定
2013/11/07 职场文书
开办饭店创业计划书
2013/12/28 职场文书
2015年司法所工作总结
2015/04/27 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python
Python开发五子棋小游戏
2022/04/28 Python
Mysql开启外网访问
2022/05/15 MySQL