【Python3 爬虫】U27_多线程爬虫之Queue线程安全队列
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随时阻塞着,只要队列中有数据,那么就会被立马取出并打印。
作者:奔跑的金鱼
声明:书写博客不易,转载请注明出处,请支持原创,侵权将追究法律责任
个性签名:人的一切的痛苦,本质上都是对自己无能的愤怒
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!