1. 什么是线程: 进程和线程都是虚拟单位,都是用来帮助我木门形象的描述某种事物
进程 : 资源单位 线程:执行单位
每一个进程都自带一个线程,线程才是真正的执行单位,进程只是在线程运行过程中提供代码运行所需要的资源
2. 为什么要有线程:
开进程 1 申请内存空间 耗资源, 拷贝代码, 耗资源
开线程 一个进程内可以起多个线程,并且线程与线程之间的数据是共享的
开启线程的开销要远远小于开启进程的开销
Thread实例对象的方法 # isAlive(): 返回线程是否活动的。 # getName(): 返回线程名。 # setName(): 设置线程名。 threading模块提供的一些方法: # threading.currentThread(): 返回当前的线程变量。 # threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 # threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
1.创建线程的两种方式
from threading import Thread import time def func(name): print(f‘{name}线程正在创建‘) time.sleep(2) print(f‘{name}线程结束‘) # 开线程不需要在__main__代码块内 但是习惯性的还是写在__main__代码块内 if __name__ == ‘__main__‘: t = Thread(target=func,args=(‘小明‘,)) t.start() print(‘主‘)
from threading import Thread import time class MyThread(Thread): def __init__(self,name): super().__init__() self.name = name def run(self): print(f‘{self.name}线程正在创建‘) time.sleep(2) print(f‘{self.name}线程结束‘) if __name__ == ‘__main__‘: t = MyThread(‘小明‘) t.start() print(‘主‘)
2.线程对象及其他方法:
from threading import Thread,current_thread,active_count import time import os def task(name,i): print(‘%s is running‘%name) # print(‘子current_thread:‘,current_thread().name) # print(‘子‘,os.getpid()) time.sleep(i) print(‘%s is over‘%name) # 开线程不需要在__main__代码块内 但是习惯性的还是写在__main__代码块内 t = Thread(target=task,args=(‘egon‘,1)) t1 = Thread(target=task,args=(‘jason‘,2)) t.start() # 告诉操作系统开辟一个线程 线程的开销远远小于进程 t1.start() # 告诉操作系统开辟一个线 t1.join() # 主线程等待子线程运行完毕 print(‘当前正在活跃的线程数‘,active_count()) # 小的代码执行完 线程就已经开启了 print(‘主‘) # print(‘主current_thread:‘,current_thread().name) # print(‘主‘,os.getpid())
原文:https://www.cnblogs.com/yanglingyao/p/11342136.html