单线程和多线程对比求斐波那契数列,阶乘和累加

#递归求斐波那契函数,阶乘,累加

from myThread import MyThread
from time import ctime, sleep

'''斐波那契数列'''
def fib(x):
    sleep(0.005)
    if x < 2 : return 1
    return (fib(x-2) + fib(x-1))    #调用递归继续求下面的数值

'''求阶乘'''
def fac(x):
    sleep(0.1)
    if x < 2 : return 1
    return (x * fac(x-1))

'''求累加值'''
def sum(x):
    sleep(0.1)
    if x < 2 : return 1
    return (x + sum(x-1))

funcs = [fib,fac,sum]   #将三个模块放在这个列表里备用
n = 10

def main():
    nfuncs = range(len(funcs))          #长度为3

    print("*** 单线程 ***")
    for i in nfuncs:
        print("starting,",funcs[i].__name__,'at: ',ctime())
        print(funcs[i](n))              #将10代进去运算,这边其实是要加1.
        print(funcs[i].__name__,'finished at: ',ctime())

    print('\n*** 多线程 ***')
    threads = []
    for i in nfuncs:
        # 调用函数相当于以前的loop,n带进去运算,也休眠这么长时间,就不需要sleep了
        t = MyThread(funcs[i],(n, ), funcs[i].__name__)
        threads.append(t)               #将实例化的结果放到这个线程列表里备用
    for i in nfuncs:
        threads[i].start()              #启动线程
    for i in nfuncs:
        threads[i].join()
        print(threads[i].getResult())   #调用这个方法来显示每个线程对应的函数的返回值

    print('All done')

if __name__ == '__main__':

    main()

#下面是输出的结果

#通过对比可以发现,单线程只能等一个线程结束后,才能创建下一个; 而多线程可以实现同步线程,可以同步创建,同步结束.








猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/80741635