前言
在线程中,访问一些全局变量,加锁是一个经常的过程。python中的queue模块中提供了同步的,线程安全的队列类,包括FIFO(先进先出)队列Queue,LIFO(后入先出)队列LifoQueue。这些队列实现了锁原语,能够在多线程中直接使用,可以使用队列实现线程间的同步。
初始化Queue(maxsize):创建一个先进先出的队列。
- qsiz():返回队列的大小
- empty():判断队列是否为空
- full():判断队列是否满了
- get():从队列中取最后一个数据
- put():将一个数据放到队列中
队列简单运用
from queue import Queue
q=Queue(4)
for x in range(5):
try:
q.put(x,block=False)
except:
break
if q.full():
print('队列已满')
print('队列的大小为%s'%q.qsize())
for x in range(5):
try:
value=q.get(block=False)
except:
break
print(value)
print('实现get方法')
if q.empty():
print('队列为空')
运行结果
结合线程的简单运用
from queue import Queue
import threading,time,random
def add_value(q):
while True:
q.put(random.randint(0,15))
time.sleep(1)
def get_value(q):
while True:
print("获取到的值为:%d"%q.get())
def main():
q=Queue(10)
th1=threading.Thread(target=add_value,args=[q])
th2=threading.Thread(target=get_value,args=[q])
th1.start()
th2.start()
if __name__=='__main__':
main()