zoukankan      html  css  js  c++  java
  • python 线程池实用总结

    线程池的两张方法 submit 和map

    from concurrent.futures import ThreadPoolExecutor
    import time
    
    #
    
    
    def sayhello(a):
        time.sleep(2)
        return "hello: "+a
    
    
    def main():
        seed = ["a","b","c"]
        # 不使用线程
        start1 = time.time()
        for each in seed:
            t1 = sayhello(each)
            print(t1)
        end1 = time.time()
        print("time1: "+str(end1-start1))
        print('------------------submit----------------------')
        # 线程池submit用法
        # 1.先把值存放在列表中
        # 2.在遍历列表取返回值
        # 3.将遍历获取的结果存放在列表中
        start2 = time.time()
        lst = []
        result_lst = []
        with ThreadPoolExecutor(3) as executor:
            for each in seed:
                t2 = executor.submit(sayhello, each)
                lst.append(t2)
            for i in lst:
                print(i.result())
                result_lst.append(i.result())
            print(result_lst)
        end2 = time.time()
        print("time2: "+str(end2-start2))
    
        print('---------------map----------------------')
        # 线程池map的用法
        # map的参数:迭代器
        # map的返回值是:生成器
        # 1、获取生成器(或直接使用list强制装换)
        # 2、遍历取值
        # 3、将遍历的结果放入新的列表
        map_lst = []
        start3 = time.time()
        with ThreadPoolExecutor(3) as executor1:
            t3 = executor1.map(sayhello, seed)
            for t in t3:
                map_lst.append(t)
            print(map_lst)
        end3 = time.time()
        print("time3: "+str(end3-start3))
    
    
    if __name__ == '__main__':
        main()

    other

    from concurrent.futures import ThreadPoolExecutor
    import time
    
    #
    
    
    def sayhello(a):
        time.sleep(2)
        foo = [1, a]
        return foo
    
    
    def main():
        seed = ["a","b","c"]
        # 不使用线程
        start1 = time.time()
        for each in seed:
            t1 = sayhello(each)
            print(t1)
        end1 = time.time()
        print("time1: "+str(end1-start1))
    
        print('---------------map----------------------')
        # 线程池map的用法
        # map 的结果是迭代器,使用for循环取值
        map_lst = []
        start3 = time.time()
        with ThreadPoolExecutor(3) as executor1:
            t3 = executor1.map(sayhello, seed)
            for t in t3:
                map_lst.extend(t)
            print(map_lst)
        end3 = time.time()
        print("time3: "+str(end3-start3))
    
    
    if __name__ == '__main__':
        main()

    区别

    map:
    1、提交的任务的函数是一样的
    2、参数:只需要提交一次目标函数,目标函数的参数放在一个迭代器(列表,字典)
    submit:
    1、提交的任务函数是不一样的,或者执行的过程之可能出现异常(使用map执行过程中发现问题会直接抛出错误)
    2、参数:submit每次都需要提交一个目标函数和对应的参数
    
    结果:
    map可以保证输出的顺序, submit输出的顺序是乱的
  • 相关阅读:
    C语言温习杂记
    C语言变量类型与内存管理
    解析搜狗新闻语料库
    关于clang, scan-build, 和clang test
    Clang checker类总结
    让你的checker出现在clang的checker list中
    Clang安装配置解释
    Operators 操作
    cumulative_distribution累积分布
    SVM
  • 原文地址:https://www.cnblogs.com/wt7018/p/12033542.html
Copyright © 2011-2022 走看看