线程
在程序里一个执行路线就叫做线程,线程是程序执行的最小单位.
多线程
多线程类似于同时执行多个不同程序,多线程运行有如下优点:
使用线程可以把占据长时间的程序中的任务放到后台去处理。
程序的运行速度可能加快
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
Python3 通过两个标准库 _thread 和 threading 提供对线程的支持,由于_thread只是为了兼容python2的thread模块,所以推荐使用threading模块实现多线程。
threading提供了如下方法:
- run(): 用以表示线程活动的方法。
- start():启动线程活动。
- join([time]): 等待至线程中止。
- isAlive(): 返回线程是否活动的。
- getName(): 返回线程名。
- setName(): 设置线程名。
Python中使用线程有两种方式:函数或者用类来包装线程对象。
函数方式:
导入threading包
对象名= threading.Thread(target = 函数名) 创建线程对象
对象名.start() 创建线程
注:由于代码执行过快,为了显示效果,使用sleep延时执行。
代码:
import threading
import time
def sing(num):
for i in range(num):
print("sing%d" % i)
time.sleep(0.5)
def dance(num):
for i in range(num):
print("dancing%d" % i)
time.sleep(0.5)
def main():
"""创建启动线程"""
t_sing = threading.Thread(target=sing, args=(5,))
t_dance = threading.Thread(target=dance, args=(6, ))
t_sing.start()
t_dance.start()
if __name__ == '__main__':
main()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
运行结果:
继承方式:
导入threading包
创建一个类继承Thread类,重写run方法
创建类对象,调用start()方法创建线程
注:由于代码执行过快,为了显示效果,使用sleep延时执行。
代码:
import threading
import time
class MyThread(threading.Thread):
def run(self):
for i in range(3):
time.sleep(1)
msg = "I'm "+self.name+' @ '+str(i)
print(msg)
def test():
for i in range(5):
t = MyThread()
t.start()
if __name__ == '__main__':
test()