美文网首页
多線程 和 Queue

多線程 和 Queue

作者: 阿o醒 | 来源:发表于2016-12-13 18:28 被阅读47次

    Queue

    The Queue module implements multi-producer, multi-consumer queues.

    def worker():
        while True: 
            item = q.get() 
            do_work(item)
            q.task_done() 
            # Indicate that a formerly enqueued task is complete. Used by queue consumer threads. 
            # For each get() used to fetch a task, \
            # a subsequent call to task_done() tells the queue that the processing on the task is complete.
    
    q = Queue()
        
    for i in range(num_worker_threads): 
        t = Thread(target=worker) 
        t.daemon = True 
        t.start()
    
    for item in source(): 
        q.put(item)
    
    q.join() #Blocks until all items in the queue have been gotten and processed.
    

    Threading 多線程

    使用Threading模块创建线程,直接从threading.Thread继承,然后重写init方法和run方法:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import threading
    import time
    exitFlag = 0
    class myThread (threading.Thread): #继承父类threading.Thread 
        def __init__(self, threadID, name, counter): 
            threading.Thread.__init__(self) 
            self.threadID = threadID 
            self.name = name 
            self.counter = counter 
    
        def run(self): #把要执行的代码写到run函数里面 线程在创建后会直接运行run函数  
            print "Starting " + self.name 
            print_time(self.name, self.counter, 5) 
            print "Exiting " + self.name
    
        def print_time(threadName, delay, counter): 
            while counter: 
                if exitFlag: 
                    thread.exit() 
                time.sleep(delay) 
                print "%s: %s" % (threadName, time.ctime(time.time())) 
                counter -= 1
    
    # 创建新线程
    thread1 = myThread(1, "Thread-1", 1)
    thread2 = myThread(2, "Thread-2", 2)
    # 开启线程
    thread1.start()
    thread2.start()
    print "Exiting Main Thread"
    

    多線程和隊列結合

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import threading
    import time
    import Queue
    
    SHARE_Q = Queue.Queue() #构造一个不限制大小的的队列
    _WORKER_THREAD_NUM = 3 #设置线程个数
    
    class MyThread(threading.Thread) : 
        def __init__(self, func) : 
            super(MyThread, self).__init__() 
            self.func = func 
    
        def run(self) : 
            self.func()
    
        def worker() :
            global SHARE_Q 
            while not SHARE_Q.empty(): 
                item = SHARE_Q.get() #获得任务 
                print "Processing : ", item 
                time.sleep(1)
    
    def main() : 
        global SHARE_Q 
        threads = [] 
        for task in xrange(5) : #向队列中放入任务 
            SHARE_Q.put(task) 
            for i in xrange(_WORKER_THREAD_NUM) : 
                thread = MyThread(worker) 
                thread.start() 
                threads.append(thread) 
            for thread in threads : 
                thread.join()
    
    if __name__ == '__main__': 
          main()
    

    相关文章

      网友评论

          本文标题:多線程 和 Queue

          本文链接:https://www.haomeiwen.com/subject/ydebmttx.html