python--多线程threading
2020-2-11
线程是cpu分配和调度的基本单位
线程是进程的实体,一个进程里面可以有多个线程,但是多个线程同时只能属于一个进程
线程在执行过程中是共享内存的,它自身只需占用系统必不可少的内存即可,所以线程的并发
所消耗的内存也是最少的
单线程和多线程,有利有弊,
多线程的话在需要大量的计算量的情况下明显的提升了效率,而单线程就是一条路走到底,
执行完一个之后接着下一个,多线程的话,就是利用cpu的轮询机制,每个线程都执行一段时间
俗称雨露均沾,因为cpu的执行速度非常快1s可以执行10多亿次,人类是完全感觉不到他中间切换
的过程,所以就有了我们的多线程,
我们可以用 线程名(变量).join 来让该线程有优先执行权,后面的线程就会等待他执行完毕之后
再执行,也就是我们所说的vip,他就是多线程里边的靓仔,所以他有优先权,
但是用了多线程的话也是有坏处的,前面有提到过,就是线程和线程之间同时调用一个变量的时候,
会发生资源抢占,导致最后的结果并不正确,聪明的开发者想到了互斥锁这个东西,来解决了线程
之间的资源抢占问题。上互斥锁也很简单。下面有注释,
接触了一下python的多线程,其中线程分为3步
1,导入模块
2,创建线程
3,执行线程
首先我们来导入模块
import threading
这样模块就导入了,导入模块之后创建线程
a=threading.Thread(target=(需要执行的函数),args=(给函数传递的参数)) # 参数可以默认是元组,一个值的话要(i,),也可以是一个字典
a.start()# 这样就启动了线程了,是不是很简单呢,
还可以通过for来同时启动多个线程
可以给子线程加上守护主线程,(主线程挂掉之后子线程也会挂掉,默认是false,也就是不守护)
def work():
for x in range(10):
lock.acquier() # 这里表示上了互斥锁
print('这里是work',x)
lock.release() # 这里表示释放了互斥锁
for x in range(10):
lock=threading.Lock() # 这里创建了一把互斥锁,
a=threading.Thread(target=(),args=())
a.start()
后面待续。。。。。。。