python--基础知识点--多线程和多进程对比

计算(cpu)密集型任务:在CPython中由于GIL锁的原因,导致对于计算(cpu)密集型任务来说,多线程的效率还没有单线程效率高。因此对于CPython中计算密集型任务来说使,多进程效率更高。

IO密集型任务:由于多进程的切换开销大于多线程切换开销,而协程根本不存在切换问题。因此对于IO密集型任务来说,在效率上协程>多线程>多进程。

多线程和多进程对比

1. cpu密集型操作,多进程快于多线程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed, ProcessPoolExecutor


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


def multi_thread():
    with ThreadPoolExecutor(3) as executor:
        all_task = [executor.submit(fib, (num)) for num in range(25, 35)]
        start_time = time.time()
        for future in as_completed(all_task):
            data = future.result()
            print("exe result:{}".format(data))
        print("last time of multi-threading is: {}".format(time.time() - start_time))


def multi_process():
    with ProcessPoolExecutor(3) as executor:
        all_task = [executor.submit(fib, (num)) for num in range(25, 35)]
        start_time = time.time()
        for future in as_completed(all_task):
            data = future.result()
            print("exe result:{}".format(data))
        print("last time of multi-process is: {}".format(time.time() - start_time))


if __name__ == '__main__':
    multi_thread()
    multi_process()


"""
运行结果:
exe result:75025
exe result:121393
exe result:196418
exe result:317811
exe result:514229
exe result:832040
exe result:1346269
exe result:2178309
exe result:3524578
exe result:5702887
last time of multi-threading is: 3.717057943344116
exe result:75025
exe result:121393
exe result:196418
exe result:317811
exe result:514229
exe result:832040
exe result:1346269
exe result:2178309
exe result:3524578
exe result:5702887
last time of multi-process is: 2.2808990478515625

Process finished with exit code 0
"""
2. IO密集型操作,多线程快于多进程
import time
from concurrent.futures import ThreadPoolExecutor, as_completed, ProcessPoolExecutor


def random_sleep(n):
    time.sleep(n)
    return n


def multi_thread():
    with ThreadPoolExecutor(3) as executor:
        all_task = [executor.submit(random_sleep, (num)) for num in [2]*30]
        start_time = time.time()
        for future in as_completed(all_task):
            data = future.result()
            print("exe result:{}".format(data))
        print("last time of multi-threading is: {}".format(time.time() - start_time))


def multi_process():
    with ProcessPoolExecutor(3) as executor:
        all_task = [executor.submit(random_sleep, (num)) for num in [2]*30]
        start_time = time.time()
        for future in as_completed(all_task):
            data = future.result()
            print("exe result:{}".format(data))
        print("last time of multi-process is: {}".format(time.time() - start_time))


if __name__ == '__main__':
    multi_thread()
    multi_process()


"""
运行结果:
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
last time of multi-threading is: 20.006490230560303
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
exe result:2
last time of multi-process is: 20.358548641204834

Process finished with exit code 0
"""

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值