上次用一行函数完成了,这次是要用多线程来完成。
#coding=utf8
'''
def singles():
sum = 0
for i in range(1,6):
t=reduce(lambda x,y:x*y,range(1,i+1))
sum +=t
return sum
print singles()
'''
#多线程实现,一下子启动5个线程,去计算1-5的阶乘,一个全局变量sum把结果加到一起
import threading,time
sum = 0
lock = threading.Lock()
def single(i):
global sum,lock
lock.acquire()
t=reduce(lambda x,y:x*y,range(1,i+1))
sum = sum + t
print threading.currentThread().getName(),t
lock.release()
def main():
global sum
for i in range(1,6):
threading.Thread(target=single,args=(i,),name='Thread'+str(i)).start()
time.sleep(1)
print sum
if __name__=='__main__':
main()
没有判断线程阻塞,直接用sleep的方法不是很安全的其实。