zoukankan      html  css  js  c++  java
  • 【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随时阻塞着,只要队列中有数据,那么就会被立马取出并打印。

  • 相关阅读:
    查找最大回文
    java-线程池
    Java基础 IO流——第一部分
    tomcat优化
    反射
    网络编程——第二部分
    网络编程——第一部分
    Java基础 IO流——第四部分
    Java基础 IO流——第三部分
    Java基础 IO流——第二部分
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12634265.html
Copyright © 2011-2022 走看看