经过总结,Python创建多线程主要有如下两种方法:
- 函数
- 类
接下来,我们就来揭开多线程的神秘面纱。
1. 用函数创建多线程
在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。
threading.Thread() 一般接收两个参数:
- 线程函数名:要放置线程让其后台执行的函数,由我们自已定义,注意不要加();
- 线程函数的参数:线程函数名所需的参数,以元组的形式传入。若不需要参数,可以不指定。
举个例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import time from threading import Thread # 自定义线程函数。 def target(name = "Python" ): for i in range ( 2 ): print ( "hello" , name) time.sleep( 1 ) # 创建线程01,不指定参数 thread_01 = Thread(target = target) # 启动线程01 thread_01.start() # 创建线程02,指定参数,注意逗号 thread_02 = Thread(target = target, args = ( "MING" ,)) # 启动线程02 thread_02.start() |
可以看到输出
hello Python
hello MING
hello Python
hello MING
2. 用类创建多线程
相比较函数而言,使用类创建线程,会比较麻烦一点。
首先,我们要自定义一个类,对于这个类有两点要求,
- 必须继承 threading.Thread 这个父类;
- 必须复写 run 方法。
这里的 run 方法,和我们上面线程函数的性质是一样的,可以写我们的业务逻辑程序。在 start() 后将会调用。
来看一下例子 为了方便对比,run函数我复用上面的main。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import time from threading import Thread class MyThread(Thread): def __init__( self , type = "Python" ): # 注意:super().__init__() 必须写 # 且最好写在第一行 super ().__init__() self . type = type def run( self ): for i in range ( 2 ): print ( "hello" , self . type ) 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
3. 线程对象的方法
上面介绍了当前 Python 中创建线程两种主要方法。
创建线程是件很容易的事,但要想用好线程,还需要学习线程对象的几个函数。
经过我的总结,大约常用的方法有如下这些:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# 如上所述,创建一个线程 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创建多线程内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://juejin.cn/post/7231552045933002807