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

發佈了88 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章