python 多线程 threading (三)

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 ==========================

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值