zoukankan      html  css  js  c++  java
  • python多线程、多进程相关知识

    Queue

    Queue用于建立和操作队列,常和threading类一起用来建立一个简单的线程队列。

      首先,队列有很多种,根据进出顺序来分类,可以分成

        Queue.Queue(maxsize)  FIFO(先进先出队列)

        Queue.LifoQueue(maxsize)  LIFO(先进后出队列)

        Queue.PriorityQueue(maxsize)  为优先级越高的越先出来,对于一个队列中的所有元素组成的entries,优先队列优先返回的一个元素是sorted(list(entries))[0]。至于对于一般的数据,优先队列取什么东西作为优先度要素进行判断,官方文档给出的建议是一个tuple如(priority, data),取priority作为优先度。

        如果设置的maxsize小于1,则表示队列的长度无限长

      FIFO是常用的队列,其一些常用的方法有:

        Queue.qsize()  返回队列大小

        Queue.empty()  判断队列是否为空

        Queue.full()  判断队列是否满了

        Queue.get([block[,timeout]])  从队列头删除并返回一个item,block默认为True,表示当队列为空却去get的时候会阻塞线程,等待直到有有item出现为止来get出这个item。如果是False的话表明当队列为空你却去get的时候,会引发异常。在block为True的情况下可以再设置timeout参数。表示当队列为空,get阻塞timeout指定的秒数之后还没有get到的话就引发Full异常。

        Queue.put(...[,block[,timeout]])  向队尾插入一个item,同样若block=True的话队列满时就阻塞等待有空位出来再put,block=False时引发异常。同get的timeout,put的timeout是在block为True的时候进行超时设置的参数。

        Queue.task_done()  从场景上来说,处理完一个get出来的item之后,调用task_done将向队列发出一个信号,表示本任务已经完成

        Queue.join()  监视所有item并阻塞主线程,直到所有item都调用了task_done之后主线程才继续向下执行。这么做的好处在于,假如一个线程开始处理最后一个任务,它从任务队列中拿走最后一个任务,此时任务队列就空了但最后那个线程还没处理完。当调用了join之后,主线程就不会因为队列空了而擅自结束,而是等待最后那个线程处理完成了。

     1 from queue import Queue
     2 from threading import Thread
     3 import time
     4 
     5 
     6 
     7 def get_url(queue):
     8     while 1:
     9         time.sleep(0.2)
    10         url = queue.get()
    11         print(url)
    12 
    13 
    14 
    15 def put_url(queue):
    16 
    17     i=0
    18     while 1:
    19         time.sleep(0.2)
    20         i += 1
    21         queue.put('url:'+str(i))
    22         print('put'+str(i))
    23 
    24 
    25 if __name__ == '__main__':
    26     name_queue = Queue(maxsize=20)
    27     thread1 = Thread(target=put_url,args=(name_queue,))
    28 
    29     thread2 = Thread(target=get_url,args=(name_queue,))
    30     thread1.start()
    31     thread2.start()
  • 相关阅读:
    每天一个Linux命令(3): cd
    每天一个Linux命令(2): ls
    scala学习笔记(2)
    jmeter性能测试 套路二
    selenium实战2 登陆博客园
    jmeter响应断言
    Python验证码通过pytesser识别
    selenium实战学习第一课
    appium的webdriver执行swipe
    APPIUM 输入中文 之套路
  • 原文地址:https://www.cnblogs.com/luozeng/p/9444411.html
Copyright © 2011-2022 走看看