天天看點

python 多線程

例一

#coding=utf-8
from threading import Thread
import os, time

#計算密集型任務
def work():
    res = 0
    for i in range(100000000):
        res *= i

if __name__ == "__main__":
    l = []
    print("本機為",os.cpu_count(),"核 CPU")  # 本機為4核
    start = time.time()
    for i in range(4):
        p = Thread(target=work)  # 多程序
        l.append(p)
        p.start()
    for p in l:
        p.join()
    stop = time.time()
    print("計算密集型任務,多線程耗時 %s" % (stop - start))      

輸出

本機為 4 核 CPU
計算密集型任務,多線程耗時 29.623388290405273      
import time
import threading

def task_thread(counter):
    print(f'線程名稱:{threading.current_thread().name} 參數:{counter} 開始時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')
    num = counter
    while num:
        time.sleep(3)
        num -= 1
    print(f'線程名稱:{threading.current_thread().name} 參數:{counter} 結束時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')


if __name__ == '__main__':
    print(f'主線程開始時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')

    #初始化3個線程,傳遞不同的參數
    t1 = threading.Thread(target=task_thread, args=(3,))
    t2 = threading.Thread(target=task_thread, args=(2,))
    t3 = threading.Thread(target=task_thread, args=(1,))
    #開啟三個線程
    t1.start()
    t2.start()
    t3.start()
    #等待運作結束
    t1.join()
    t2.join()
    t3.join()

    print(f'主線程結束時間:{time.strftime("%Y-%m-%d %H:%M:%S")}')      
主線程開始時間:2019-01-20 15:28:27
線程名稱:Thread-1 參數:3 開始時間:2019-01-20 15:28:27
線程名稱:Thread-2 參數:2 開始時間:2019-01-20 15:28:27
線程名稱:Thread-3 參數:1 開始時間:2019-01-20 15:28:27
線程名稱:Thread-3 參數:1 結束時間:2019-01-20 15:28:30
線程名稱:Thread-2 參數:2 結束時間:2019-01-20 15:28:33
線程名稱:Thread-1 參數:3 結束時間:2019-01-20 15:28:36
主線程結束時間:2019-01-20 15:28:36      

繼續閱讀