异步【ProcessPoolExecutor】和【ThreadPoolExecutor】斐波拉切算法实例

原因:斐波拉切算法

ProcessPoolExecutor: 进程池map的用法

# coding=utf-8
import logging
from concurrent.futures import ProcessPoolExecutor
import time

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [*] %(processName)s  %(message)s"
)


def fib (n):
    if n < 3:
        return 1
    return fib(n - 1) + fib(n - 2)


if __name__ == '__main__':
    start = time.time()
    executor = ProcessPoolExecutor(max_workers=4)
    # 异步提交任务------------------------------------------------------------
    futures = executor.map(fib, range(3, 35))
    for future in futures:
        logging.info(future)
    
    executor.shutdown(True)
    logging.info(time.time() - start)

输出:

2019-10-07 21:08:19,147 [*] MainProcess  2
2019-10-07 21:08:19,149 [*] MainProcess  3
2019-10-07 21:08:19,150 [*] MainProcess  5
2019-10-07 21:08:19,153 [*] MainProcess  8
2019-10-07 21:08:19,153 [*] MainProcess  13
2019-10-07 21:08:19,161 [*] MainProcess  21
2019-10-07 21:08:19,161 [*] MainProcess  34
2019-10-07 21:08:19,161 [*] MainProcess  55
2019-10-07 21:08:19,162 [*] MainProcess  89
2019-10-07 21:08:19,162 [*] MainProcess  144
2019-10-07 21:08:19,162 [*] MainProcess  233
2019-10-07 21:08:19,162 [*] MainProcess  377
2019-10-07 21:08:19,162 [*] MainProcess  610
2019-10-07 21:08:19,162 [*] MainProcess  987
2019-10-07 21:08:19,162 [*] MainProcess  1597
2019-10-07 21:08:19,162 [*] MainProcess  2584
2019-10-07 21:08:19,162 [*] MainProcess  4181
2019-10-07 21:08:19,162 [*] MainProcess  6765
2019-10-07 21:08:19,162 [*] MainProcess  10946
2019-10-07 21:08:19,173 [*] MainProcess  17711
2019-10-07 21:08:19,173 [*] MainProcess  28657
2019-10-07 21:08:19,203 [*] MainProcess  46368
2019-10-07 21:08:19,207 [*] MainProcess  75025
2019-10-07 21:08:19,248 [*] MainProcess  121393
2019-10-07 21:08:19,293 [*] MainProcess  196418
2019-10-07 21:08:19,391 [*] MainProcess  317811
2019-10-07 21:08:19,573 [*] MainProcess  514229
2019-10-07 21:08:19,812 [*] MainProcess  832040
2019-10-07 21:08:20,164 [*] MainProcess  1346269
2019-10-07 21:08:20,639 [*] MainProcess  2178309
2019-10-07 21:08:21,261 [*] MainProcess  3524578
2019-10-07 21:08:21,890 [*] MainProcess  5702887
2019-10-07 21:08:21,954 [*] MainProcess  3.179666757583618

ThreadPoolExecutor:线程池 map的用法

# coding=utf-8
import logging
from concurrent.futures import ThreadPoolExecutor
import time

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [*]  %(threadName)s %(message)s"
)


def fib (n):
    if n < 3:
        return 1
    return fib(n - 1) + fib(n - 2)


if __name__ == '__main__':
    start = time.time()
    executor = ThreadPoolExecutor(max_workers=4)
    # 异步提交任务------------------------------------------------------------
    futures = executor.map(fib, range(3, 35))
    for future in futures:
        logging.info(future)
    
    executor.shutdown(True)
    logging.info(time.time() - start)

输出:

2019-10-07 21:12:15,525 [*]  MainThread 2
2019-10-07 21:12:15,525 [*]  MainThread 3
2019-10-07 21:12:15,525 [*]  MainThread 5
2019-10-07 21:12:15,525 [*]  MainThread 8
2019-10-07 21:12:15,610 [*]  MainThread 13
2019-10-07 21:12:15,641 [*]  MainThread 21
2019-10-07 21:12:15,641 [*]  MainThread 34
2019-10-07 21:12:15,641 [*]  MainThread 55
2019-10-07 21:12:15,642 [*]  MainThread 89
2019-10-07 21:12:15,642 [*]  MainThread 144
2019-10-07 21:12:15,642 [*]  MainThread 233
2019-10-07 21:12:15,642 [*]  MainThread 377
2019-10-07 21:12:15,642 [*]  MainThread 610
2019-10-07 21:12:15,642 [*]  MainThread 987
2019-10-07 21:12:15,642 [*]  MainThread 1597
2019-10-07 21:12:15,642 [*]  MainThread 2584
2019-10-07 21:12:15,642 [*]  MainThread 4181
2019-10-07 21:12:15,642 [*]  MainThread 6765
2019-10-07 21:12:15,642 [*]  MainThread 10946
2019-10-07 21:12:15,642 [*]  MainThread 17711
2019-10-07 21:12:15,643 [*]  MainThread 28657
2019-10-07 21:12:15,643 [*]  MainThread 46368
2019-10-07 21:12:15,643 [*]  MainThread 75025
2019-10-07 21:12:15,826 [*]  MainThread 121393
2019-10-07 21:12:15,826 [*]  MainThread 196418
2019-10-07 21:12:15,964 [*]  MainThread 317811
2019-10-07 21:12:16,249 [*]  MainThread 514229
2019-10-07 21:12:16,708 [*]  MainThread 832040
2019-10-07 21:12:16,992 [*]  MainThread 1346269
2019-10-07 21:12:18,253 [*]  MainThread 2178309
2019-10-07 21:12:18,979 [*]  MainThread 3524578
2019-10-07 21:12:19,611 [*]  MainThread 5702887
2019-10-07 21:12:19,611 [*]  MainThread 4.085493087768555
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值