创建一个队列:queue_obj = queue.Queue(maxsize=30)
maxsize :表示允许存储的最
(FIFO) : 对列--先进先出
存值 : queue_obj.put( )
取值 : queue_obj.get( )
获取队列的大小 : queue_obj.qsize( )
判断队列是否满 : queue_obj.full( )
判断队列是否为空 : queue_obj.empty()
# 注意 : 队列是线程安全的,list,dict 是非线程安全的,使用的时候最好使用线程锁
多线程
什么是多任务:同时执行多个任务 例如:同时打开微信,QQ,word,优酷,浏览器
同时执行--并行
单核同时执行的任务数量只有一个,但是看上去像是在执行多个任务,是 因为切换的间隔时间级短
多核cpu:同时可以执行多个任务,假如任务量超过核心数,在某个核心下 任务会交替执行
并发和并行的概念:
并发:单核cpu同时执行多个任务,任务是同时发起的,但是并不是同时执行,而是交替执行
并行:任务数量小于或等于核心数,这个时候每一个核心都在执行任务,任务是同时执行的,
实现多任务的手段(方式):
1.多线程
2.多进程
3.协程
线程之间的操作是无序的
一个线程下面有一个主线程
线程:相当于打开一个浏览器
进程:相当于在浏览器里面打开多个窗口
启动线程: thread.start()
添加join的目的:为了让任务队里中的所有请求都执行完毕
线程锁:threadlock = threading.Lock()
进程池
导入 from multiprocessing import Pool
创建一个进程池:pool = Pool()
pool.apply() 同步的方法,执行效率比较低
apply_async 是一个异步方法,可以提高任务执行的效率
func,对应的任务的函数名称
args=(),传递参数(元组)
kwds={}, 传递参数(字典)
callback=None,(执行成功后的回调)
error_callback=None,(执行错误之后的回调)
关闭进程池:pool.close pool.join():join方法 让进程池中的任务执行完毕后,回到主线程继续执行 pool.submit(): 向进程池中添加任务 .add_done_callback():添加回调方法 pool.shutdown():执行了join 方法 使用manage().Queue() 创建一个队列,可以实现在进程池的进程中实现数据的共享(通讯) q = Manger().Queue()