线程定义:线程就是操作系统中能够进行运算的最小单位,被包含在进程当中,线程是进程的实际操作单位
用到的包 threading
用到的函数
启动线程start()
添加阻塞join()
获取当前所在线程信息current_thread()
当前活跃线程数active_count()
把子线程变成主线程中的守护线程,当主线程结束后,子线程也会随之结束,一旦主线程代码执行完毕,程序就结束了,如果没有添加守护线程,当主线程执行完毕之后,会等待子线程中的任务执行完成之后,再退出程序
使用的函数是setDaemon(True)
线程安全锁,用于锁定资源
from threading import Lock
acqurie()对资源进行加锁
release()释放资源
RLock()递归锁,用法和lock一样,递归锁可以进行锁嵌套
BoundedSemaphore(3)互斥锁,只允许一个线程对资源进行修改,信号量允许一定量的线程对资源进行处理
线程事件,主线程控制其他线程的执行
event = threading.Event()创建事件对象
event.set()
event.clear()
enent.is_set()
event.wait()
定时器Timer() 两个参数,1.多少秒之后执行。2.执行的操作
--------------------------------------------分割-------------------------------------------------------------
进程。一个程序运行的实例就是一个进程,每一个进程都提供了程序运行所需要的一些资源
每一个进程都会产生一个线程,即主线程,在主线程中再创建一些子线程
进程之间的数据是不共享的,如果要进行数据通信可以通过Queue或Pipe
另os模块中有一个getpid()函数,可以查看进程的id
Manager可以用来实现进程中的数据共享,manager会通过一个进程,来使其他的进程通过代理的方法操作python对象
进程锁和线程锁一样。
进程池,进程的开启是需要消耗一定资源的,使用多进程的时候会消耗大量的内存功能,为了防止上面这种情况,使用进程池开启多进程。
线程的开启占用的资源比较少,多线程只会导致cpu切换线程的频繁时,系统变慢,卡顿
进程池有同步apply()和异步apply_async()两种任务
--------------------------------------------------分割---------------------------------------------------------------------
协程,协程可以认为是一个微线程,就是只有一个线程,对一个线程进行分解,在一个线程中规定某些任务执行的顺序,当有些任务不需要使用cpu操作时(IO),可以使用协程
from greenlet import greenlet
switch()切换
GIL全局解释器,相当于每一个进程都配有的一把锁,也因为有GIL的存在,python没有真正意义上的多线程