zoukankan      html  css  js  c++  java
  • 基于concurrent.futures的进程池 和线程池

     

    concurrent.futures:是关于进程池 和 线程池 的

    官方文档

    https://docs.python.org/dev/library/concurrent.futures.html

    现讲进程池把,看文档你会发现,两种池的用法几乎是一样的

    一段代码来了:

    from concurrent.futures import ProcessPoolExecutor
    impor time,os
    def work(n):
        print('%s is running'% os.getpid())
        print('%s is end'% os.getpid())
        return n**2
    if __name__ == '__main__':
        p = ProcessPoolExecutor() # 默认是CPU的个数
        start = time.time()
        l = []
        for i in range(10):
            obj = p.submit(work,i)
            l.append(obj)
        p.shutdown()
        print([obj.result() for obj in l])
        print(time.time()-start)

    欧克!在上面的代码中 有几个关键的方法和类。

    ProcessPoolExecutor :看类的名字,进程池, 创建进程池的,需要注意的是ProcessPoolExecutor()括号内默认的是本机的CPU个数。
    p.submit 类似与Pool的apply_async方法,给进程传值,submit(函数名,函数的参数)
    obj.result() 看看这个接口的名字,多好领会,得到结果的, 这个result()上面的方法submit()得到的结果是一个对象,想要得到实际的值,obj.result()就得得到值了,
      是不是很简单

    p.shutdown() 这个shutdown是用来等的,谁等呢,在哪里写的就是谁等,等上面的子进程运行完,在运行下面的。

    还有一个map方法 ,我们再来看段代码。
    from concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
    import time,os
    from threading import currentThread
    def work(n):
        print('%s is running'% currentThread().name)
        time.sleep(2)
        print('%s is end'% currentThread().name)
        return n**2
    if __name__ == '__main__':
        p = ThreadPoolExecutor() # 默认的CPU的个数*5
        obj = p.map(work,range(10))  # 迭代器
        p.shutdown()
        print(list(obj))

    map方法

    得到的是一个对象  obj=map(函数名,可迭代的对象)

    就这么简单,跟之前的内置函数一样。

    线程池中唯一不同的就是:

    p = ThreadPoolExecutor() # 默认的CPU的个数*5
     


    最新免费视频: http://www.pythonav.com/all/10000.html
  • 相关阅读:
    LeetCode 链表题总结
    分布式系统 MIT 6.824 Lab 1: MapReduce 准备
    Consul 入门(二)
    Consul 入门
    IDEA批量修改变量快捷键
    Spring源码解析-JdbcTemplate
    SpringMVC源码解析-HTTP请求处理和分发
    SpringMVC源码解析-DispatcherServlet启动流程和初始化
    发现一个网站可以看英文版的harry potter小说,好东西分享一下哈
    TypeSrcript如何引入第三方库 如果加d.ts以及async await如何使用 demo,只有代码,文字后续补充
  • 原文地址:https://www.cnblogs.com/niehaidong111/p/7458583.html
Copyright © 2011-2022 走看看