美文网首页
对比python的计算密集型单线程和多线程

对比python的计算密集型单线程和多线程

作者: 余生还长你别慌 | 来源:发表于2019-08-18 22:15 被阅读0次

python的并发有三种方式:线程,进程和协程。今天记录下python多线程和单线程对比结果,当然这里测试的时计算密集型。按照理论多线程性能还比不上单线程,结果会如此吗?我们一起看:

(1)首先定义sum1和sum2,sum1纪录单线程加的结果,sum2纪录多线程加的结果。主要是最后打印确认别计算错误哈;

(2)定义一个锁,因为多线程对同一个全局变量修改数值会出现争抢和竞争导致结果错误,所以加了个锁给fun3和fun4用

(3)定义fun1,fun2,fun3,fun4四个函数,fun1和fun2单线程用,fun3和fun4给多线程用

(4)main函数就是做个时间计算,然后打印

代码如下:

# -*- encoding=UTF-8 -*-
__author__ = 'wjj1982'
__date__ = '2019/8/18 17:11'
__product__ = 'PyCharm'
__filename__ = 'multi-threading'

import threading
import time


sum1 = 0
sum2 = 0
lock = threading.Lock()
# fun1和fun2来测试单线程计算
def fun1():
    global sum1
    print('第一个程序开始停5秒哈。。。')
    for i in range(100000000):
        sum1 += 1
    print('第一个程序结束哈。。。')

def fun2():
    global sum1
    print('第二个程序开始停5秒哈。。。')
    for i in range(100000000):
        sum1 += 1
    print('第二个程序结束哈。。。')

# fun3和fun4来测试多线程计算
def fun3():
    global sum2
    print('第一个程序开始停5秒哈。。。')
    lock.acquire()
    for i in range(100000000):
        sum2 += 1
    lock.release()
    print('第一个程序结束哈。。。')



def fun4():
    global sum2
    print('第二个程序开始停5秒哈。。。')
    lock.acquire()
    for i in range(100000000):
        sum2 += 1
    lock.release()
    print('第二个程序结束哈。。。')



def main():
    """测试多线程,方法如下:运行fun1和fun2,计算耗时,然后运行多线程的fun3和fun4,看看耗时多少"""
    start1 = time.time()
    fun1()
    fun2()
    end1 = time.time()
    print('没有多线程时耗时:{}'.format(end1 - start1))
    print(sum1)

    start2 = time.time()
    thread_list = []
    t1 = threading.Thread(target=fun3)
    t2 = threading.Thread(target=fun4)
    thread_list.append(t1)
    thread_list.append(t2)
    for t in thread_list:
        t.start()
    for t in thread_list:
        t.join()
    end2 = time.time()
    print('有多线程时耗时:{}'.format(end2 - start2))
    print(sum2)


if __name__ == '__main__':
    main()

结果如下图,理论果然是没错的哈,捂脸!


多线程和单线程比较结果.jpg

相关文章

网友评论

      本文标题:对比python的计算密集型单线程和多线程

      本文链接:https://www.haomeiwen.com/subject/uggdsctx.html