码迷,mamicode.com
首页 > 编程语言 > 详细

python线程池示例

时间:2019-12-07 21:03:58      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:Fix   for   %s   pre   创建线程   关闭   list   color   work   

 

使用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()

 

 

python线程池示例

标签:Fix   for   %s   pre   创建线程   关闭   list   color   work   

原文地址:https://www.cnblogs.com/z-qinfeng/p/12003234.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!