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随时阻塞着,只要队列中有数据,那么就会被立马取出并打印。

  • 相关阅读:
    P2319 [HNOI2006]超级英雄
    P4302 [SCOI2003]字符串折叠
    P1122 最大子树和
    HDU——2089 不要62
    P4555 最长双回文串
    P1463 [HAOI2007]反素数
    P2412 查单词
    P2787 语文1(chin1)- 理理思维
    P3078 [USACO13MAR]扑克牌型Poker Hands
    ubuntu中desktop与alternate版本的区别(转载)
  • 原文地址:https://www.cnblogs.com/OliverQin/p/12634265.html
Copyright © 2011-2022 走看看