• 并发编程--进程池与线程池-练习3


    通过继承multipocessing类,实现一个进程池。

    代码如下:

    # coding = utf-8
    '''
    实现一个进程池
    '''
    import time
    import multiprocessing
    from multiprocessing import Manager, Queue
    
    class MyProcess(object):
        def __init__(self, num):
            super().__init__()
    
            # self.queue = Manager().Queue()
            self.queue = multiprocessing.JoinableQueue()
    
            for i in range(1, num+1):
                multiprocessing.Process(target=self.work, daemon=True).start()
    
        def work(self):
            '''
            从队列获取任务并执行
            :return:
            '''
            while True:
                try:
                    func, args, kwargs = self.queue.get()
                    func(*args, **kwargs)
                except Exception as e:
                    print(e)
                finally:
                    self.queue.task_done()
    
        def apply_async(self, func, args=(), kwargs={}):
            '''
            接收任务,并将其存入到队列中
            :param func:
            :param args:
            :param kwargs:
            :return:
            '''
            self.queue.put((func, args, kwargs))
    
        def join(self):
            '''
            控制进程结束
            :return:
            '''
            self.queue.join()
    def func1():
        print('111')
        time.sleep(2)
    def func2():
        print('222')
        time.sleep(2)
    def func3():
        print('333')
    if __name__ == '__main__':
        process = MyProcess(2)
        process.apply_async(func1)
        process.apply_async(func2)
        process.apply_async(func3)
        process.join()
        print('任务结束!')
  • 相关阅读:
    vue-cli生成的重要代码详解
    vuex初探
    vue-router笔记
    新技术的学习
    图片优化方法(有时间看看)
    关于老教授之家项目的思考 && 中国互联网+大赛培训
    If you are tired...
    微信公众平台开发初探
    winscp介绍与使用
    获取当前服务器信息
  • 原文地址:https://www.cnblogs.com/pythoner6833/p/9001222.html
Copyright © 2020-2023  润新知