python multithreading,multiprocessing效率对比

import multiprocessing as mp
import threading as td
import time

def job(q):
    res = 0
    for i in range(1000000):
        res += i + i ** 2 + i**3
    q.put(res)

def multcore():
    q = mp.Queue()
    p1 = mp.Process(target=job,args=(q,))
    p2 = mp.Process(target=job,args=(q,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    res1 = q.get()
    res2 = q.get()
    print('multcore: ',res1 + res2)

def normal():
    res = 0
    for _ in range(2):
        for i in range(1000000):
            res += i + i ** 2 + i**3
    print('normal: ',res)

def multithread():
    q = mp.Queue()
    t1 = td.Thread(target=job,args=(q,))
    t2 = td.Thread(target=job,args=(q,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    res1 = q.get()
    res2 = q.get()
    print('multithread: ',res1 + res2)

if __name__ == '__main__':
    st = time.time()

    normal()
    st1 = time.time()
    print('normal time: ',st1 - st)

    multithread()
    st2 = time.time()
    print('multithread time: ', st2 - st1)

    multcore()
    print('multcore time: ',time.time() - st2)

result:

normal time:  1.3973419666290283
multithread time:  1.416612148284912
multcore time:  0.7420649528503418
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面试时经常被问到数组去重的问题,个人觉得这种问题其实没太大的作用,毕竟在实际工作中很少能遇到的很大的数组,所以不论...
    fighterboy阅读 250评论 0 0
  • //需要AFN //.h //AFNetworking + (void)post:(NSString *)url ...
    CHADHEA阅读 797评论 0 0
  • Demo代码和引用知识点都参考自 《理解Python并发编程一篇就够了|PoolExecutor篇》--董伟明 或...
    蒋狗阅读 16,302评论 1 2
  • 之前就爬过拉勾网,但是遇到一些错误一直没有办法解决,果断放弃了,今天又重新试着写写看,对于一个菜鸟来说,真的都是处...
    小小佐阅读 1,394评论 0 0
  • 就象毫米、微米一样,纳米是一个尺度概念,是一米的十亿分之一,并没有物理内涵。当物质到纳米尺度以后,大约是在...
    秋山知红叶阅读 2,817评论 6 5