Python使用多进程和多线程执行“水仙花数”算法对比耗时时间

1、使用多线程和多进程执行一个CPU密集型任务

        水仙花数介绍:

                水仙花数就是将一个数的个位、十位、百位,拆分出来。 然后将各个位的3次方相加,结果与数字本身相同的就是水仙花数。

        对比多进程和多线程在执行“水仙花算法”的效率,代码如下:

# _*_ encoding:utf-8 _*_
from threading import Thread
from multiprocessing import Process


def is_armstrong(n):
    # 判断是不是"水仙花数"
    """
    水仙花数就是将一个数的个位、十位、百位,拆分出来。
    然后将各个位的3次方相加,结果与数字本身相同的就是水仙花数。
    """
    a, t = [], n
    while t > 0:
        a.append(t % 10)
        t //= 10
    k = len(a)
    return sum(x ** k for x in a) == n


def find_armstrong(a, b):
    # 在某一范围内查找所有的"水仙花数"
    print(a, b)
    res = [k for k in range(a, b) if is_armstrong(k)]
    print('%s ~ %s: %s' % (a, b, res))


def find_by_thread(*args_list):
    # 查找水仙花线程函数
    workers = []
    for args in args_list:
        worker = Thread(target=find_armstrong, args=args)
        workers.append(worker)
        worker.start()
    for worker in workers:
        worker.join()


def find_by_process(*args_list):
    # 查找水仙花进程函数
    workers = []
    for args in args_list:
        worker = Process(target=find_armstrong, args=args)
        workers.append(worker)
        worker.start()
    for worker in workers:
        worker.join()


if __name__ == '__main__':
    import time

    # 查看多进程和多线程执行CPU密集型程序,比较时间消耗
    start = time.time()
    # find_by_process((20000000, 25000000), (25000000, 30000000))
    find_by_thread((20000000, 25000000), (25000000, 30000000))
    print(time.time() - start)
    '''
    多进程耗时时间:19.72704315185547
    多线程程耗时时间:39.088863134384155
    '''

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值