目录
1.线程安全队列简介
在线程中,访问一些全局变量,经常需要加锁。如果想把数据存储到某个队列中,Python提供了一个内置模块queue
。Python中的queue提供了同步的、线程安全的队列类,包括FIFO(先进先出)队列Queue,LIFO(后入先出)队列LifoQueue,这些队列都实现了锁原语(可以理解为原子操作,要么不做,要么都做完),能够在多线程中直接使用。
相关的函数如下:
- 1.初始化Queue(maxsize):创建一个先进先出的队列
- 2.qsize():返回队列的大小
- 3.empty():判断队列是否为空
- 4.full():判断队列是否满了
- 5.get():从队列中取最后一个数据
- 6.put():将一个数据放入队列
2.实例演示
# Author:Logan
import time
from queue import Queue
import threading
def set_value(q):
a = 0
while True:
q.put(a)
a += 1
time.sleep(4)
def get_value(q):
while True:
print(q.get())
def main():
q = Queue(4)
t1 = threading.Thread(target=set_value, args=[q])
t2 = threading.Thread(target=get_value, args=[q])
t1.start()
t2.start()
if __name__ == '__main__':
main()
在set_value函数中,我们每隔3秒才会往队列中添加一个数据,但是在get_value,我们使用get随时阻塞着,只要队列中有数据,那么就会被立马取出并打印。
来源:oschina
链接:https://my.oschina.net/u/4263894/blog/3220164