线程进程和CPU之间的关系:CPU运行的就是线程,运行的多了就是进程,同时运行了多个线程就变成了多线程(仅限个人理解)
概念:
线程:进程中的每个子任务,不能独立存在,CPU执行的最小单位
进程:独立的所有子任务的集合
特点:
进程:内存独立,CPU独立,速率低共享数据难,安全性高
线程:内存共享,CPU使用独立,速率高共享数据易,安全性低
线程的五种状态:
创建状态 就绪状态 运行状态 阻塞状态 死亡状态
threading模块包含的方法:除了_thread模块中的所有方法外
threading.currentThread():返回当前的线程变量
threading.enumerate():正在运行的线程
threading.activeCount():返回正在运行的线程的数量len(threading.enumerate()):
join() 加入并阻断主函数的执行,即执行完成才执行主函数,可以加时间,join(1)阻断一秒结束阻断
start() 和 run()
实现线程的两种方式:函数方式和类方式
以下是类方式的步骤及调用方法的过程
import threading,time #第一步:继承threading.Thread class Mythread(threading.Thread): def __init__(self): threading.Thread.__init__(self); #第二部:写构造方法,且必须调用父类的构造方法 print('Mythread __init__()') def run(self): #第三部:重写父类的run方法,会在start之后自动调用 for i in range(10): print(self.getName(),i) time.sleep(0.1) #时间单位为秒 t1=Mythread() t2=Mythread() t1.start() t2.start() #第四步:实现开始方法,如果重写了start()方法,一定要调用父类的start(),需要调用start()方法才可以执行 input()
函数方式:线程必须依赖函数实现,不能单独存在。当函数结束,线程结束。想让线程一直执行在最后加一个input()
import threading,time def something(): for i in range(1,11): print(i) time.sleep(0.2) threading._start_new_thread(something,()) input()