zoukankan      html  css  js  c++  java
  • Process Pool实现Python的并行执行

    参考:Python3.6.2文档

    Source code: Lib/concurrent/futures/thread.py and Lib/concurrent/futures/process.py

    Executor对象

    class concurrent.futures.Executor

    方法:

    submit(fn*args**kwargs)                              #函数fn会按fn(*args **kwargs)执行,返回值是一个Future Object

    map(func*iterablestimeout=Nonechunksize=1)                                 #executor.map() 函数调用时需要输入辅助函数和待处理的数据列表。

                                                                                         #这个函数帮我们完成所有麻烦的工作,把列表分成几个小列表,把小列表分配给每个子进程,运行子进程,以及汇总结果。

    map(func, *iterables)  

    submit(fn*args**kwargs)

    shutdown(wait=True)

    示例:

    with ThreadPoolExecutor(max_workers=1) as executor:
        future = executor.submit(pow, 323, 1235)
        print(future.result())
    

    ThreadPoolExecutor对象

    Executor子类

    class concurrent.futures.ThreadPoolExecutor(max_workers=Nonethread_name_prefix=”)

    import time
    def wait_on_b():
        time.sleep(5)
        print(b.result())  # b will never complete because it is waiting on a.
        return 5
    
    def wait_on_a():
        time.sleep(5)
        print(a.result())  # a will never complete because it is waiting on b.
        return 6
    
    
    executor = ThreadPoolExecutor(max_workers=2)
    a = executor.submit(wait_on_b)
    b = executor.submit(wait_on_a)
    

    ProcessPoolExecutor对象

    Executor子类

    class concurrent.futures.ProcessPoolExecutor(max_workers=None)

    import concurrent.futures
    import math
    
    PRIMES = [
        112272535095293,
        112582705942171,
        112272535095293,
        115280095190773,
        115797848077099,
        1099726899285419]
    
    def is_prime(n):
        if n % 2 == 0:
            return False
    
        sqrt_n = int(math.floor(math.sqrt(n)))
        for i in range(3, sqrt_n + 1, 2):
            if n % i == 0:
                return False
        return True
    
    def main():
        with concurrent.futures.ProcessPoolExecutor() as executor:
            for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
                print('%d is prime: %s' % (number, prime))
    
    if __name__ == '__main__':
        main()
    

    不并行的话,代码应该是

    for number in PRIMES:
         pirme = is_prime(number);
    

    ProcessPoolExecutor.map(...)常用于for循环中  

      

      

      

  • 相关阅读:
    Moving Price and Standard Price
    Partner function解析
    [ABAP] ABAP中定义和呼叫宏
    ABAP
    Words Learning~~(1-3)
    Words Learning~~(1-2)
    Words Learning~~(1-1)
    SQLSERVER如何查看索引缺失
    Material Stock manage T-code
    远程重启
  • 原文地址:https://www.cnblogs.com/eniac1946/p/7423398.html
Copyright © 2011-2022 走看看