一 . GIL锁
GIL锁是python代码转解释器代码的一个锁
虽然我们加锁的原因是因为要保护安全性从而降低了效率,但是加锁也会出现安全性的问题!
二 . 线程队列
import queue
三种队列形式
1 . class queue.(maxsize = 0) # 先进先出
2 . class queue.LifoQueue(maxsize = 0) #先进后出,后进先出
3 . class queue.PriotityQueue(maxsize = 0) #优先级队列,参数是:元祖(1,‘ 2 ’) 1是优先级, ‘ 2 ’是数据
这三种队列都是线程安全的,不会出现多个线程抢占同一个资源或数据的情况。
三 . 线程池基本方法及回调函数
ProcessPoolExecutor :线程池的导入模块,提供异步调用
回顾下进程池:ThreadPoolExecutor 进程池的导入模块,提供异步调用
from concurrent.futures import ThreadPoolExecutor,ProcePoolExecutor
from multiprocessing import pool (模块导入有点长,需要记一下)
线程池的基本方法:
1 . submit(fn,*args,**kwargs) # 异步提交任务
2 . map(func,*iterables,timeout=None,chunksize = 1) # 映射,取代for 循环submit 的操作
3 . shutdown #(wait = True) 相当于进程吃的pool.close( )+pool.join( ) 操作
4 . result(timeout = None) # 取得结果
5 . add_done_callback(fn) # 回调函数