美文网首页
Python线程池ThreadPoolExecutor的使用

Python线程池ThreadPoolExecutor的使用

作者: alan2yang | 来源:发表于2019-05-18 11:52 被阅读0次

    ThreadPoolExecutor实际上是一个上下文管理器,可以设置池中线程数量,同时保证池中的每个线程都调用.join()方法。

    它还有两个重要的方法submit和map,其中:
    submit(func, *args, **kwargs)的传参效果是运行func( *args, **kwargs)函数,
    map(func, *iterables)的传参效果是对iterables迭代器遍历执行func(iterables[i])函数,但要保证func函数要接收参数,否则出错了也不会报错,程序直接结束(坑)。

    下面是两个实例,帮助理解,详细的介绍,看官方文档:https://docs.python.org/3/library/concurrent.futures.html

    import concurrent.futures
    import logging
    import time
    
    name=0
    
    def thread_fuction():
        global name
        name+=1
        logging.info(f"thread {name} start")
        time.sleep(2)
        logging.info(f"thread {name} end")
    
    
    if __name__ == "__main__":
    
        format="%(asctime)s:%(message)s"
        logging.basicConfig(format=format,level=logging.INFO,datefmt="%H:%M:%S")
    
        with concurrent.futures.ThreadPoolExecutor(max_workers=3) as texecutor:
            texecutor.submit(thread_fuction)
            texecutor.submit(thread_fuction)
            texecutor.submit(thread_fuction)
            texecutor.submit(thread_fuction)
            texecutor.submit(thread_fuction)
            texecutor.submit(thread_fuction)
    
    # 运行结果
    11:50:00:thread 1 start
    11:50:00:thread 2 start
    11:50:00:thread 3 start
    11:50:02:thread 3 end
    11:50:02:thread 4 start
    11:50:02:thread 4 end
    11:50:02:thread 5 start
    11:50:02:thread 5 end
    11:50:02:thread 6 start
    11:50:04:thread 6 end
    11:50:04:thread 6 end
    11:50:04:thread 6 end
    
    
    import concurrent.futures
    import logging
    import time
    
    def thread_fuction(name):
        logging.info(f"thread {name} start")
        time.sleep(2)
        logging.info(f"thread {name} end")
    
    if __name__ == "__main__":
    
        format="%(asctime)s:%(message)s"
        logging.basicConfig(format=format,level=logging.INFO,datefmt="%H:%M:%S")
    
        with concurrent.futures.ThreadPoolExecutor(max_workers=3) as texecutor:
            texecutor.map(thread_fuction,range(10))
    
    # 运行结果
    11:03:09:thread 0 start
    11:03:09:thread 1 start
    11:03:09:thread 2 start
    11:03:11:thread 0 end
    11:03:11:thread 3 start
    11:03:11:thread 1 end
    11:03:11:thread 2 end
    11:03:11:thread 4 start
    11:03:11:thread 5 start
    11:03:13:thread 3 end
    11:03:13:thread 6 start
    11:03:13:thread 4 end
    11:03:13:thread 7 start
    11:03:13:thread 5 end
    11:03:13:thread 8 start
    11:03:15:thread 6 end
    11:03:15:thread 9 start
    11:03:15:thread 7 end
    11:03:15:thread 8 end
    11:03:17:thread 9 end
    

    相关文章

      网友评论

          本文标题:Python线程池ThreadPoolExecutor的使用

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