详解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网络编程学习笔记(四):域名系统
Jun 09 Python
详解C++编程中一元运算符的重载
Jan 19 Python
Python使用迭代器捕获Generator返回值的方法
Apr 05 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
python 文件操作删除某行的实例
Sep 04 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
python实现批量nii文件转换为png图像
Jul 18 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
Keras-多输入多输出实例(多任务)
Jun 22 Python
python 解决Windows平台上路径有空格的问题
Nov 10 Python
python基础之类方法和静态方法
Oct 24 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数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
JQuery勾选指定name的复选框集合并显示的方法
2015/05/18 Javascript
jQuery toggle 代替方法
2016/03/22 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
详解JS模块导入导出
2017/12/20 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
taro小程序添加骨架屏的实现代码
2019/11/15 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
Python中列表与元组的乘法操作示例
2018/02/10 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
解决python运行启动报错问题
2020/06/01 Python
Python图像读写方法对比
2020/11/16 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
一些Solaris面试题
2015/12/22 面试题
暑期实习鉴定
2013/12/16 职场文书
授权委托书格式范文
2014/08/02 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
村干部群众路线教育活动对照检查材料
2014/10/01 职场文书
离职证明范本
2015/06/12 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
nginx rewrite功能使用场景分析
2022/05/30 Servers
JavaScript架构搭建前端监控如何采集异常数据
2022/06/25 Javascript