#递归求斐波那契函数,阶乘,累加
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()
#下面是输出的结果
#通过对比可以发现,单线程只能等一个线程结束后,才能创建下一个; 而多线程可以实现同步线程,可以同步创建,同步结束.