线程和进程:
????????1.线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
????????2.一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线 ????????3.进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件知作号等),某进程内的线程在其他进程不可见; ????????4.调度和切换:线程上下文切换比进程上下文切换要快得多
我们先来看一段代码:
import time # 导入模块
def test(number): # 定义函数
n = 0 # 定义变量
while n < 3: # 设置循环退出条件
print(number) # 打印传入的参数
time.sleep(2) # 间隔两秒
n += 1 # 自增
test(1) # 调用
test(2) # 调用
输出结果:
我们发现程序是先执行test(1),等执行完毕之后再执行test(2)
?
import threading # 导入模块
import time # 导入模块
def test(number): # 定义函数
n = 0 # 定义变量
while n < 3: # 设置循环退出条件
print(number) # 打印传入的参数
time.sleep(2) # 间隔两秒
n += 1 # 自增
t1 = threading.Thread(target=test, args=(1,)) # 使用线程,固定写法,后边args是传递参数固定写法
t2 = threading.Thread(target=test, args=(2,)) # 使用线程,固定写法,后边args是传递参数固定写法
t1.start() # 线程开启
t2.start() # 线程开启
输出结果:
?对照上一个程序我们发现1和2是同时输出的(后边1和2挨着是同时输出的结果),也就是两个线程在同时进行。
多线程类的写法:
import threading # 导入模块
class Test(threading.Thread): # 继承多线程
def __init__(self, number): # 初始化
super(Test, self).__init__() # 调用父类初始化
self.number = number # 初始化变量
def run(self): # 重写run方法
print("这是类的多线程" + str(self.number))
t1 = Test(1) # 创建实例
t2 = Test(2) # 创建实例
t1.start() # 开启多线程
t2.start() # 开启多线程
输出结果:
?类的写法注意一定要继承threading.Thread,而且重写的run方法是自动调用的
|