线程
线程
1 什么是线程
进程其实一个资源单位,而进程内的线程才是cpu上的执行单位
线程其实指的就是代码的执行过程
2 为何要用线程
线程vs进程
1. 同一进程下的多个线程共享该进程内的资源
2. 创建线程的开销要远远小于进程
主线程:进程中自带的线程
开启线程的俩种方式:
from threading import Thread import time def task(name): print('%s is running' %name) time.sleep(2) print('%s is done' %name) if __name__ == '__main__': t=Thread(target=task,args=('线程1',)) t.start() print('主') #资源 主进程 执行 主线程 结果: 线程1 is running 主 线程1 is done
from threading import Thread import time class Mythread(Thread): def run(self): print('%s is running' %self.name) time.sleep(2) print('%s is done' %self.name) if __name__ == '__main__': t=Mythread() t.start() print('主') 结果: Thread-1 is running 主 Thread-1 is done
第一个共享资源的例子,后面三个线程对象相关属性和方法
from threading import Thread n=100 def task(): global n n=0 if __name__ == '__main__': t=Thread(target=task) t.start() t.join() #主线程等子线程运行完 print('主',n) 结果 主 0
from threading import Thread import os def task(): print('%s is running' %os.getpid()) if __name__ == '__main__': t=Thread(target=task) t.start() print('主',os.getpid()) 结果: 主 0 9808 is running 主 9808
from threading import Thread,active_count import time def task(name): print('%s is running' %name) time.sleep(2) if __name__ == '__main__': t=Thread(target=task,args=('子线程1',)) t.start() t.join() #加了这个,子线程就结束了,还剩一个主线程,注释掉之后,结果会变2 print('主',active_count()) #active_count() 线程活跃的个数 结果: 子线程1 is running 主 1
from threading import Thread,current_thread import time def task(): print('%s is running' %current_thread().name) time.sleep(2) if __name__ == '__main__': t=Thread(target=task,) t.start() t.join() print('主',current_thread().name) # 结果: # Thread-1 is running # 主 MainThread