Python线程
1、什么是线程
- 进程:程序运行在操作系统上的实例
- 线程:轻量级的进程,进程中可划分出多个线程,线程可独立的调度运行,(进程中分割出来可以独立运行的实例)
- 进程:操作系统分配资源的基本单位(进程之间隔离)
- 线程:操作系统下调度的基本单位,进程中多个线程共享进程中的资源。
2、进程和线程的区别
- 一个程序至少有一个进程,一个进程至少有一个线程。
- 线程的划分尺度小于进程(资源比进程少),使得多线程程序并发性高。
- 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大提高了程序的运行效率
- 线程不能独立运行,必须放在进程中。
3、Python中多线程的创建
创建多线程类似有创建进程。
首先导入模块:
import threading
创建线程对象:
t = threading.Thread(target=线程任务函数,args=(传递的实参元组))
启动线程:
t.start()
阻塞主线程等待子线程完成
t.join()
Demo:
import threading import time def my_Task(num): print("进程:%s 正在下载。。。%d" % (threading.current_thread().name, num)) time.sleep(1) def main(): # 创建线程的实例对象 for i in range(5): t = threading.Thread(target=my_Task, args=(i,)) # 启动线程 t.start() if __name__ == '__main__': main()
运行效果
进程:Thread-1 正在下载。。。0 进程:Thread-2 正在下载。。。1 进程:Thread-3 正在下载。。。2 进程:Thread-4 正在下载。。。3 进程:Thread-5 正在下载。。。4
4、继承Thread类创建线程
使用步骤:
- 创建类,继承Thread类
class MyThread(Thread)
- 重写构造方法
__init__
方法,调用一下父类Thread中的__init__
方法。
def __init__(self): Thread.__init__(self)
- 重写run方法,run方法里面写上执行线程要做的任务的代码
def run(self): for i in range(5): print("%s 线程 正在打印----> %d" % (self.name, i)) time.sleep(1)
完整Demo
from threading import Thread import time class MyThread(Thread): def init(self): Thread.init(self) def run(self): for i in range(5): print("%s 线程 正在打印----> %d" % (self.name, i)) time.sleep(1) def main(): t1 = MyThread() t1.start() t1.join() if __name__ == '__main__': main()
运行结果:
Thread-1 线程 正在打印----> 0 Thread-1 线程 正在打印----> 1 Thread-1 线程 正在打印----> 2 Thread-1 线程 正在打印----> 3 Thread-1 线程 正在打印----> 4
5、Thread类中的常用方法
- start(): 开始运行生成的线程实例
- setName(): 设置生成的线程的名字
- run(): 重载此方法,作为线程运行的部分
- isAlive(): 查看线程是否活动
- join(): 阻塞主线程,等待子线程结束
- getName(): 得到线程名字
- threading.current_thread().name: 获取当前线程对象