35 线程
1、关于线程
1.什么是线程
进程:资源单位
线程:执行单位
注意:每一个进程中都会自带一个线程
2.为什么要有线程
开一个进程:
申请内存空间 耗时
将代码拷贝到申请的内存空间中 耗时
开线程:
不需要申请内存空间
开线程的开销远远小于开进程的开销!!!
3.如何使用线程
2、开启线程的两种方式
方式一
from threading import Thread import time import random def task(name): print('%s is running ' % name) time.sleep(random.random()) print('%s is over' % name) if __name__ == '__main__': t = Thread(target=task, args=('Tom',)) t.start() # 开启线程的速度非常快,几乎代码执行完线程就已经开启 print('主') >>>: Tom is running 主 Tom is over
方式二
from threading import Thread import time import random class MyThread(Thread): def __init__(self, name): super().__init__() self.name = name def run(self): print('%s is running' % self.name) time.sleep(random.random()) print('%s is end' % self.name) if __name__ == '__main__': p = MyThread('json') p.start() print('主') >>>: json is running 主 json is end
3、线程之间的数据共享
from threading import Thread x = 100 def task(): global x x = 666 t = Thread(target=task) t.start() t.join() print(x) >>>: 666
4、线程互斥锁
from threading import Thread, Lock import time import random mutex = Lock() n = 100 def task(): global n mutex.acquire() tmp = n time.sleep(random.random()) n = tmp - 1 mutex.release() t_list = [] for i in range(100): t = Thread(target=task) t.start() t_list.append(t) for t in t_list: t.join() print(n) # 0
5、线程对象的其他属性和方法
获取线程id:os.getpid()
获取线程名:current_thread().name current_thread().getName()
当前存活线程数:active_count()
from threading import Thread, active_count, current_thread import os import time def task(name): print('%s is running'%name,os.getpid()) print('%s is running' % name, current_thread().name time.sleep(1) print('%s is over' % name) def info(name): print('%s is running' % name, current_thread().name time.sleep(1) print('%s is over' % name) t = Thread(target=task, args=('Tom',)) t1 = Thread(target=info, args=('Bob',)) t.start() t1.start() t.join() print(active_count()) # 当前存活的线程数 print(os.getpid()) print(current_thread().name)>>>: Tom is running 18220 Tom is running Thread-1 Bob is running Thread-2 Bob is over Tom is over 1 18220 MainThread
6、守护线程
from threading import Thread import time def task(name): print('%s is running' % name) time.sleep(1) print('%s is over' % name) if __name__ == '__main__': t = Thread(target=task, args=('Tom',)) t.daemon = True t.start() print('主') >>>: Tom is running 主

更多精彩