• 并发编程--进程池与线程池-练习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('任务结束')
  • 相关阅读:
    开放GIS标准OGC之路(4)之 解密Filter(摘抄)
    在WCF中使用async/await 关键字的简化的异步编程模型(译)
    WinCE仿真器设置
    oracle PL/SQL编程详解
    oracle 日期格式
    钢笔工具使用教程
    使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
    利用bitmap将图片部分颜色透明
    PS圆角图片并保留透明背景
    Script Debugger的使用
  • 原文地址:https://www.cnblogs.com/pythoner6833/p/9001216.html
Copyright © 2020-2023  润新知