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

    """
    实现线程的反复调用
    用一个线程执行多个任务
    """
    import threading
    import queue
    
    class MyThread(threading.Thread):
        """
        通过一些方法实现线程的反复调用
        """
    
        def __init__(self):
            super().__init__()
            self.queue = queue.Queue()  # 实例化队列
            self.daemon = True  # # 设置为守护线程,随着主线程结束而结束
            self.start()  # 开启线程,让线程在实例时就开启
    
        def run(self):
            """
            通过while True实现反复调用的过程
            让线程去调用
            :return:
            """
            while True:
                # 从对列中取出处理任务的函数及参数,然后调用处理逻辑
                func, args, kwargs = self.queue.get()
                # 任务处理
                func(*args, **kwargs)
    
                # 标识本次任务处理完毕,并通知queue.join
                self.queue.task_done()  # 队列内部的计数器,每次执行任务,调用一次
    
        def apply_async(self, func, args=(), kwargs={}):
            """
            接受待处理任务的函数及其参数,并传入到队列中
            :param func: 待处理任务
            :return:
            """
            # 将待处理任务的函数及其参数存入到队列中
            self.queue.put((func, args, kwargs))
    
        def join(self, timeout=None):
            """
            等待队列中的任务处理完毕
            :param timeout:
            :return:
            """
            # 从task_done()中获取任务是否处理完毕
            self.queue.join()
    
    def func1():
        """
        待处理逻辑,需要线程去完成的任务
        :return:
        """
        print('Thread to do sth_1... ')
    def func2():
        """
        待处理逻辑,需要线程去完成的任务
        :return:
        """
        print('Thread to do sth_2... ')
    def func3():
        """
        待处理逻辑,需要线程去完成的任务
        :return:
        """
        print('Thread to do sth_3... ')
    
    
    if __name__ == '__main__':
        t = MyThread()  # 实例一个线程
    
        # 让线程t完成func1,func2,func3三个任务
        t.apply_async(func1)
        t.apply_async(func2)
        t.apply_async(func2)
    
        t.join()  # 等待任务结束
  • 相关阅读:
    奇技淫巧训练之一
    基于JS模块化现状谈谈选择ES6模块的原因
    vue-cli3项目搭建配置以及性能优化
    Umi + DvaJS
    ReactFragment用法介绍
    什么是纯函数
    10.25考试
    10.23考试
    线段树合并(雨天的尾巴 题解)
    10.21考试
  • 原文地址:https://www.cnblogs.com/pythoner6833/p/9001007.html
Copyright © 2011-2022 走看看