• 关于Pyhton多线程同步队列的应用


    '''
        同步队列
        put方法和task_done方法,
        queue有一个未完成任务数量num,put依次num+1,
        task依次num-1.任务都完成时任务结束。
    
    
    1.创建一个 Queue.Queue() 的实例,然后使用数据对它进行填充。
    2.将经过填充数据的实例传递给线程类,后者是通过继承 threading.Thread 的方式创建的。
    3.每次从队列中取出一个项目,并使用该线程中的数据和 run 方法以执行相应的工作。
    4.在完成这项工作之后,使用 queue.task_done() 函数向任务已经完成的队列发送一个信号。
    5.对队列执行 join 操作,实际上意味着等到队列为空,再退出主程序。
    
    '''
    
    import threading
    import queue
    import time
    import random
    
    class myThread(threading.Thread):
        def __init__(self, index, queue):
            threading.Thread.__init__(self)
            self.index = index
            self.queue = queue
    
        def run(self):
            while True:
                time.sleep(1)
                item = self.queue.get()
                if item is None:
                    break
                print("序号:", self.index, "任务:", item, " 完成")
                # task_done方法使得未完成的任务数量-1
                self.queue.task_done()
    
    q = queue.Queue(0)
    
    # 初始化函数接受一个数字来作为该队列的容量,如果传递的是
    # 一个小于等于0的数,那么默认会认为该队列的容量是无限的.
    
    for i in range(2):
        # 两个线程同时完成任务
        myThread(i, q).start()
    
    for i in range(10):
        # put方法使得未完成的任务数量+1
        q.put(i)
    

      

  • 相关阅读:
    用 SuperObject 解析淘宝上的 Json 数据
    JSON 之 SuperObject(17): 实例
    JSON 之 SuperObject(16): 实例
    JSON 之 SuperObject(15): 实例
    JSON 之 SuperObject(14): 从 XML 中解析
    JSON 之 SuperObject(13): 关于 SO 与 SA 函数
    JSON 之 SuperObject(12): TSuperEnumerator、TSuperAvlIterator、ObjectFindFirst...
    IO 流
    Servlet的创建和生命周期
    分页
  • 原文地址:https://www.cnblogs.com/eternal1025/p/6676707.html
Copyright © 2020-2023  润新知