thread 支持守护线程
from time import ctime
from time import sleep
import my_thread
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 my_sum(x):
sleep(0.1)
if x < 2:
return 1
return x + my_sum(x-1)
funcs = [fib, fac, my_sum]
n = 5
def main():
nfuncs = range(len(funcs))
threads = []
for i in nfuncs:
t = my_thread.MyThread(func=funcs[i], args=(n,), name=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 'main end =========================='
if __name__ == '__main__':
main()
调用不同的函数进行多线程,结果:
start=== fib at Sat May 07 12:35:06 2016
start=== fac at Sat May 07 12:35:06 2016
start=== my_sum at Sat May 07 12:35:06 2016
end===== fib at Sat May 07 12:35:06 2016
8
end===== my_sum at Sat May 07 12:35:06 2016
end===== fac at Sat May 07 12:35:06 2016
120
15
main end ==========================
对同一个函数多线程:
from time import ctime
from time import sleep
import my_thread
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 my_sum(x):
sleep(0.1)
if x < 2:
return 1
return x + my_sum(x-1)
funcs = [fib, fac, my_sum]
n = 5
def main():
nfuncs = range(len(funcs))
threads = []
nums = [5, 6, 7, 10]
nums_len = range(len(nums))
for i in nums_len:
t = my_thread.MyThread(func=my_sum, args=(nums[i],), name=nums[i])
threads.append(t)
for i in nums_len:
threads[i].start()
for i in nums_len:
threads[i].join()
print threads[i].getResult()
print 'main end =========================='
if __name__ == '__main__':
main()
结果:
start=== 5 at Sat May 07 13:02:58 2016start===
6 at Sat May 07 13:02:58 2016
start=== 7 at Sat May 07 13:02:58 2016start===
10 at Sat May 07 13:02:58 2016
end===== 5 at Sat May 07 13:02:59 2016
15
end===== 6 at Sat May 07 13:02:59 2016
21
end===== 7 at Sat May 07 13:02:59 2016
28
end===== 10 at Sat May 07 13:02:59 2016
55
main end ==========================