详解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 相关文章推荐
DJANGO-ALLAUTH社交用户系统的安装配置
Nov 18 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
深入解析Python中的urllib2模块
Nov 13 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
pygame实现雷电游戏雏形开发
Nov 20 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
基于PyQT实现区分左键双击和单击
May 19 Python
PyQt5的相对布局管理的实现
Aug 07 Python
python如何爬取动态网站
Sep 09 Python
python合并多个excel文件的示例
Sep 23 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
2015/05/12 PHP
ppk谈JavaScript style属性
2008/10/10 Javascript
prototype Element学习笔记(篇二)
2008/10/26 Javascript
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
Vue v-text指令简单使用方法示例
2019/09/19 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Python如何存储数据到json文件
2020/03/09 Python
python导入库的具体方法
2020/06/18 Python
浅析Python的命名空间与作用域
2020/11/25 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
北体毕业生求职信
2014/02/28 职场文书
南京导游词
2015/02/03 职场文书