zoukankan      html  css  js  c++  java
  • python线程池示例

    使用with方式创建线程池,任务执行完毕之后,会自动关闭资源 , 否则就需要手动关闭线程池资源 

    import threading, time
    from concurrent.futures import ThreadPoolExecutor, as_completed
    
    
    class MyTask(threading.Thread):
        """
            使用python线程的方法
        """
    
        def __init__(self, thread_id):
            threading.Thread.__init__(self)
            self.thread_id = thread_id
    
        def run(self):
            while 1:
                print('%s线程正在运行。。。。。。。。' % self.thread_id)
                time.sleep(1)
    
    
    class MyThreadPool(object):
        """
            使用python线程池的两种方式
        """
    
    
        def __init__(self):
            """init方法,构造测试数据"""
            self.param_data = []
            for i in range(1000):
                self.param_data.append(str(i))
    
    
        def target_task(self, param):
            """目标方法"""
            print(threading.currentThread().name)  # 打印当前线程的name
            # print(param)
            return param + '----------task'
    
        def execute_thread_pool_method1(self):
            """使用线程池的第一种方式"""
            '''创建一个线程池,里面有10个线程'''
            with ThreadPoolExecutor(max_workers=10, thread_name_prefix='test') as tpe:  # 使用with,会自动关闭任务
                result = []  # 缓存线程任务执行结果
    
                for i in self.param_data:
                    r = tpe.submit(self.target_task, i)  # submit提交任务,执行的顺序是乱的
                    result.append(r)
    
                for r in as_completed(result):
                    print(r.result())
    
                tpe.shutdown()
    
        def execute_thread_pool_method2(self):
            """使用线程池的第二种方式"""
            '''创建一个线程池,里面有10个线程'''
            with ThreadPoolExecutor(10) as tpe:
                #  结果的数据类型就是list
                result = tpe.map(self.target_task, self.param_data)
                for r in result:  # 对结果集进行处理
                    print(r)
    
    
    if __name__ == '__main__':
        my_task = MyTask(1)
    
        my_task.setDaemon(True)  # 将my_task这个线程设置成守护线程
        my_task.start()
        print(threading.active_count())   # 打印活着的线程数
    
    
        # my_thread_pool = MyThreadPool()
        # my_thread_pool.execute_thread_pool_method1()
        # my_thread_pool.execute_thread_pool_method2()
  • 相关阅读:
    ABP实现文件下载
    sqlserver把查询结果转为json和xml
    使用docker安装nginx
    sqlserver 索引优化 sql语句执行分析
    centos7下安装docker教程
    mysql查看sql的执行计划(是否使用索引等)
    vue计算属性和watch的区别有哪些?
    多表连接的三种方式详解 hash join、merge join、 nested loop
    【Winform】所有的dll都打包到一个exe里
    【异常处理】System.Data.Entity.Core.EntityException: 'The underlying provider failed on Open.'
  • 原文地址:https://www.cnblogs.com/z-qinfeng/p/12003234.html
Copyright © 2011-2022 走看看