Python并发编程之创建多线程的几种方法(二)
大家好,并发编程
进入第二篇。
今天的内容会比较基础,主要是为了让新手也能无障碍地阅读,所以还是要再巩固下基础。学完了基础,你们也就能很顺畅地跟着我的思路理解以后的文章。
本文目录
- 学会使用函数创建多线程
- 学会使用类创建多线程
- 多线程:必学函数讲解
经过总结,Python创建多线程主要有如下两种方法:
- 函数
- 类
接下来,我们就来揭开多线程的神秘面纱。
. 学会使用函数创建多线程
在Python3中,Python提供了一个内置模块 threading.Thread
,可以很方便地让我们创建多线程。
threading.Thread()
一般接收两个参数:
- 线程函数名:要放置线程让其后台执行的函数,由我们自已定义,注意不要加
()
; - 线程函数的参数:线程函数名所需的参数,以元组的形式传入。若不需要参数,可以不指定。
举个例子
1import time
2from threading import Thread
3
4# 自定义线程函数。
5def main(name="Python"):
6 for i in range(2):
7 print("hello", name)
8 time.sleep(1)
9
10# 创建线程01,不指定参数
11thread_01 = Thread(target=main)
12# 启动线程01
13thread_01.start()
14
15
16# 创建线程02,指定参数,注意逗号
17thread_02 = Thread(target=main, args=("MING",))
18# 启动线程02
19thread_02.start()
可以看到输出
1hello Python
2hello MING
3hello Python
4hello MING
是不是超级简单呢?别急,下面也是一样简单。
. 学会使用类创建多线程
相比较函数而言,使用类创建线程,会比较麻烦一点。
首先,我们要自定义一个类,对于这个类有两点要求,
- 必须继承
threading.Thread
这个父类; - 必须覆写
run
方法。
这里的 run
方法,和我们上面线程函数
的性质是一样的,可以写我们的业务逻辑程序。在 start()
后将会调用。
来看一下例子
为了方便对比,run
函数我复用上面的main
。
1import time
2from threading import Thread
3
4class MyThread(Thread):
5 def __init__(self, name="Python"):
6 # 注意,super().__init__() 一定要写
7 # 而且要写在最前面,否则会报错。
8 super().__init__()
9 self.name=name
10
11 def run(self):
12 for i in range(2):
13 print("hello", self.name)
14 time.sleep(1)
15
16if __name__ == '__main__':
17 # 创建线程01,不指定参数
18 thread_01 = MyThread()
19 # 创建线程02,指定参数
20 thread_02 = MyThread("MING")
21
22 thread_01.start()
23 thread_02.start()
当然结果也是一样的。
1hello Python
2hello MING
3hello Python
4hello MING
. 多线程:必学函数讲解
学完了两种创建线程的方式,你一定会惊叹,咋么这么简单,一点难度都没有。
其实不然,上面我们的线程函数
为了方便理解,都使用的最简单的代码逻辑。而在实际使用当中,多线程运行期间,还会出现诸多问题,只是我们现在还没体会到它的复杂而已。
不过,你也不必担心,在后面的章节中,我会带着大家一起来探讨一下,都有哪些难题,应该如何解决。
磨刀不误吹柴工,我们首先得来认识一下,Python给我们提供的 Thread
都有哪些函数和属性,实现哪些功能。学习完这些,在后期的学习中,我们才能更加得以应手。
经过我的总结,大约常用的方法有如下这些:
1t=Thread(target=func)
2
3# 启动子线程
4t.start()
5
6# 阻塞子线程,待子线程结束后,再往下执行
7t.join()
8
9# 判断线程是否在执行状态,在执行返回True,否则返回False
10t.is_alive()
11t.isAlive()
12
13# 设置线程是否随主线程退出而退出,默认为False
14t.daemon = True
15t.daemon = False
16
17# 设置线程名
18t.name = "My-Thread"
好了,Python线程基础知识,我们大概都介绍完了。
从下一章开始,我们就开始接触多线程里比较难的知识点啦,是不是有点小期待呢?
Python并发编程之创建多线程的几种方法(二)的更多相关文章
- Python并发编程系列之多线程
1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说Python中线程的用法.实际上,程序的运行都是以线程为基本单位的,每一个进程中都至少有一个线程(主线程),线程又可以创建子线程 ...
- Java创建多线程的三种方法
Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...
- 创建多线程的第二种方法实现Callable接口
1.实现Callable接口,重写call方法,有返回值 2.通过实现Callable接口创建的线程只能在线程池中使用. 3.返回值就是run方法返回的对象 4.通过future.get()可以获取到 ...
- Java 创建多线程的三种方法
1. 继承Thread类2. 实现Runnable接口3. 匿名类的方式 注: 启动线程是start()方法,run()并不能启动一个新的线程
- Python并发编程二(多线程、协程、IO模型)
1.python并发编程之多线程(理论) 1.1线程概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程(流水线的工作需要电源,电源就相当于 ...
- python并发编程&多线程(二)
前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...
- python并发编程&多线程(一)
本篇理论居多,实际操作见: python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一 ...
- Python并发编程04 /多线程、生产消费者模型、线程进程对比、线程的方法、线程join、守护线程、线程互斥锁
Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线程join.守护线程.线程互斥锁 目录 Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线 ...
- Python并发编程之消息队列补充及如何创建线程池(六)
大家好,并发编程 进入第六篇. 在第四章,讲消息通信时,我们学到了Queue消息队列的一些基本使用.昨天我在准备如何创建线程池这一章节的时候,发现对Queue消息队列的讲解有一些遗漏的知识点,而这些知 ...
随机推荐
- [java]Windows 7 配置jdk 1.7环境变量
来自百度文库 Windows 7 配置jdk 1.7环境变量 环境:win7(32位)64位和下面差不多 jdk1.7 1.右击计算机-属性-高级系统设置-高级-环境变量,弹出&quo ...
- 【Unity Shaders】Diffuse Shading——漫反射光照改善技巧
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- Linux Shell 脚本攻略学习--四
linux中(chattr)创建不可修改文件的方法 在常见的linux扩展文件系统中(如ext2.ext3.ext4等),可以将文件设置为不可修改(immutable).某些文件属性可帮助我们将文件设 ...
- python3爬虫 - 利用浏览器cookie登录
http://blog.csdn.net/pipisorry/article/details/47980653 爬虫爬网站不免遇到需要登录的问题. 登录的时候可能还会碰到需要填验证码的问题, 有的验证 ...
- Android Studio 从安装到配置使用
Android Studio是谷歌为android量身定制的IDE,在2013年谷歌大会上提出之后一直持续更新,现在已经是功能十分强劲的android开发工具,作为一个android开发者,还是早点转 ...
- (二十六)静态单元格(Cell)
制作类似iOS系统设置的页面,如果使用代码来实现,将会比较麻烦,可以通过静态单元格技术方便的实现. 注意:静态单元格只支持TableViewController. 可以通过storyboard直接操作 ...
- 一键安装Android开发环境
一键安装Android开发环境 1 下载tadp-3.0r4-linux-x64.run 进入下面的地址下载: https://developer.nvidia.com/gameworksdownlo ...
- EBS R12安装升级(FRESH)(二)
3 Linux系统设置 这一节步骤基本都在终端root用户下进行. 自行熟悉vi或其他文本工具的用法. 3.1 host-only外网连接 如果用的NAT模式这一节略过. 右击当前主机连接外网的网卡, ...
- 【Android 应用开发】Android之Bluetooth编程
Android Bluetopth 编程大牛文章 http://my.oschina.net/u/994235/blog?catalog=313604 ViewGroup 相关资料 : http:// ...
- C语言笔试经典-查找多位数重复数字以及次数
从键盘输入一个多位的整数 用程序判断 这个数里面有没有 重复的数字 有重复的数字就打印 哪个数字重复了 重复了几次 例如:输入:1122431 打印结果: 1重复 出现3次 2重复 出现2次, ...