• 并发编程--进程池与线程池-练习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('任务结束')
  • 相关阅读:
    iOS iPad开发之Modal
    iOS SVN终端指令
    iOS iPad开发之UIPopoverController的使用
    iOS Xcode6和Xcode5的区别?
    算法 查找算法--二分查找
    算法 排序算法--快速排序
    算法 排序算法--选择排序
    XCode签名证书死活不能选
    IOS7 适配时导航栏变黑
    Xcode Provisioning 路径
  • 原文地址:https://www.cnblogs.com/pythoner6833/p/9001216.html
Copyright © 2020-2023  润新知