zoukankan      html  css  js  c++  java
  • 并发编程--进程池与线程池-练习2

    通过继承threading类,实现一个线程池

    实现代码:

    # coding = utf-8
    '''
    自己实现一个线程池
    '''
    import time
    import queue
    import threading
    
    class MyThreadPool(object):
        def __init__(self, num):
            super().__init__()
            # self.daemon = True  # 设置为守护线程
            self.queue = queue.Queue()  # 队列
    
            # 给定线程池大小,并启动线程
            for i in range(1, num+1):
                thread = threading.Thread(target=self.processing, name='thread_{}'.format(i), daemon=True)
                thread.start()
    
        def apply_async(self, func, args=(), kwargs={}):
            '''
            接收待处理任务函数及其参数,并将参数与函数保存到队列中,方便线程池处理
            :param args:
            :param kwargs:
            :return:
            '''
            self.queue.put((func, args, kwargs))
    
        def processing(self):
            '''
            处理任务, 通过while循环,从队列中取出处理任务的函数及其对象参数,并调用
            :return:
            '''
            while True:
                try:
                    func, args, kwargs = self.queue.get()
                    func(*args, **kwargs)
                finally:
                    # 标识此次处理任务结束
                    self.queue.task_done()
    
        def join(self):
            '''
            从task_done中确定队列是否为空,保证队列中的任务都已经完成
            :return:
            '''
            self.queue.join()
    
    def func1():
        time.sleep(3)
        print('111')
    
    def func2():
        time.sleep(3)
        print("222")
    
    def func3():
        time.sleep(3)
        print('333')
    
    if __name__ == '__main__':
        # 实例化一个线程池
        threads = MyThreadPool(2)
        # 任务处理
        threads.apply_async(func1, args=(), kwargs={})
        threads.apply_async(func2, args=(), kwargs={})
        threads.apply_async(func3, args=(), kwargs={})
        # 线程池结束
        threads.join()
        print('任务结束')
  • 相关阅读:
    JS和jQuery获取节点的兄弟,父级,子级元素
    HTTP协议详解
    HTML5自定义属性对象Dataset
    当你输入一个网址后都发生什么
    javascript实现ajax
    第一次项目总结
    CSS简单布局总结
    animate.css总结
    自定义动画
    CSS 第四天 多重背景 变形 过渡
  • 原文地址:https://www.cnblogs.com/pythoner6833/p/9001216.html
Copyright © 2011-2022 走看看