美文网首页
python并发处理库--concurrent.futures

python并发处理库--concurrent.futures

作者: 神经网络爱好者 | 来源:发表于2019-10-22 19:07 被阅读0次

    concurrent提供了两种并发模型,一个是多线程ThreadPoolExecutor,一个是多进程ProcessPoolExecutor。对于IO密集型任务宜使用多线程模型。对于计算密集型任务应该使用多进程模型。

    一、多线程

    # coding: utf8
    
    import time
    import sys
    import fire
    import threading
    from concurrent.futures import ThreadPoolExecutor, wait
    
    
    # 分割子任务
    def each_task(index):
        time.sleep(2)  # 睡1s,模拟IO
        sys.stdout.write("thread %s square %d\n" % (threading.current_thread().ident, index))
        return index * index  # 返回结果
    
    # 基础的调用过程
    # def run(thread_num, task_num):
    #     # 实例化线程池,thread_num个线程
    #     executor = ThreadPoolExecutor(thread_num)
    #     start = time.time()
    #     fs = []  # future列表
    #     for i in range(task_num):
    #         fs.append(executor.submit(each_task, i))  # 提交任务
    #     wait(fs)  # 等待计算结束
    #     end = time.time()
    #     duration = end - start
    #     s = sum([f.result() for f in fs])  # 求和
    #     print("normal process total result=%s cost: %.2fs" % (s, duration))
    #     executor.shutdown()  # 销毁线程池
    
    # map函数的调用
    def run(thread_num, task_num):
        # 实例化线程池,thread_num个线程
        task = [i for i in range(task_num)]
        start = time.time()
        with ThreadPoolExecutor(thread_num) as e:
            fs = e.map(each_task, task)
    
        s = sum([f for f in fs])  # 求和
        end = time.time()
        duration = end - start
        print(s)
        print("total result=%s cost: %.2fs" % (s, duration))
    
    
    if __name__ == '__main__':
        run(10, 10)
    

    二、多进程

    代码类似,风格一样,具体参考
    https://juejin.im/post/5b1e36476fb9a01e4a6e02e4

    相关文章

      网友评论

          本文标题:python并发处理库--concurrent.futures

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