美文网首页
并发编程-线程池

并发编程-线程池

作者: Yanl__ | 来源:发表于2019-10-28 20:31 被阅读0次

    线程池通过concurrent.futures包中导入ThreadPoolExecutor(也可以导入进程池,ProcessPoolExecutor。 基本方法用法与线程一致)
    -基本方法:

    1. 起线程池t_pool = ThreadPoolExecutor(max_workers=5).其中max_workers的值为多线程的数量,一般不超过cpu数*5
    2. 提交任务t_pool.submit(func, args).其中func为需要执行的函数,args为需要传给func的参数
    3. 等待所有线程执行完毕后再执行后续的主进程代码t_pool.shutdown()
    4. 回调函数t.add_done_callback(call_back). t为submit后得到的返回值,在通过add_done_callback调用回调函数,将每个值传给回调函数call_back
    5. map(func, iterator). 功能与submit类似,只是不能获得函数的返回值。其中func为需要执行的函数,iterator为可迭代的对象,将值传给func
    # -*- coding: UTF-8 -*-
    
    """
    # @Author  : yanlei
    # @FileName: 线程池
    
    从concurrent.futures中导入线程池。(也可以导入进程池,用法一样)
    """
    from concurrent.futures import ThreadPoolExecutor
    import time
    
    def func(n):
        time.sleep(2)
        print(n)
        return n*n
    
    
    def call_back(ret):
        print('结果是%s'%ret.result())
    
    
    # t_list = []
    # t_pool = ThreadPoolExecutor(max_workers=5)  # 设置线程池中线程的个数,不要超过cpu数*5
    # for i in range(20):
    #     t = t_pool.submit(func, i)  # 提交任务,submit可以取得返回值。 map不能获取返回值
    #     t_list.append(t)
    # t_pool.shutdown()  # shutdown 功能等于 t_pool.close() + t_pool.join()
    # for t in t_list:  # 如果上面没有执行shutdown(),则一次执行5个线程后就输出5个结果
    #     print('t的值', t.result())  # t.result() 从t对象中获取具体的值
    #
    
    # map
    # t_pool = ThreadPoolExecutor(max_workers=5)
    # t_pool.map(func, range(20))  # map拿不到func的返回值
    
    
    # add_done_callback  回调函数
    # 用法一:
    t_list = []
    t_pool = ThreadPoolExecutor(max_workers=5)  # 设置线程池中线程的个数,不要超过cpu数*5
    for i in range(20):
        t_pool.submit(func, i).add_done_callback(call_back)
    
    
    # 用法二:
    t_list = []
    t_pool = ThreadPoolExecutor(max_workers=5)  # 设置线程池中线程的个数,不要超过cpu数*5
    for i in range(20):
        t = t_pool.submit(func, i)
        t_list.append(t)
    t_pool.shutdown()
    for t in t_list:
        t.add_done_callback(call_back)
    
    

    相关文章

      网友评论

          本文标题:并发编程-线程池

          本文链接:https://www.haomeiwen.com/subject/axhivctx.html