天天看點

【python】Python 線程調用定義每個線程要運作的函數建立清單接收t.start()對象内容。循環3次

簡介:

  Python 線程可以通過主線程,調用線程來執行其他指令,

  為Python提供更友善的使用。  

  • 并發線程測試# 指令調用方式

    import threading,time

    # 定義每個線程要運作的函數

    def run(n):

    print("task",n)

    time.sleep(1)

    # 生成一個線程執行個體target=目标,args=參數

    t1 = threading.Thread(target=run,args=("t1",))

    t2 = threading.Thread(target=run,args=("t2",))

    #啟動線程

    t1.start()

    t2.start()

     import threading,time

    # 繼承threading.Thread

    class MyThread(threading.Thread):

    # 重寫父類的構造函數

    def __init__(self,n):

    # 重構構造函數

    super(MyThread.self).__init__()

    self.n = n

    # 定義每個線程要運作的函數

    def run(self):

    print("running task ",self.n)

    # 執行個體化

    t1 = MyThread("t1")

    t2 = MyThread("t2")

    # 啟動線程

    t1.start()

    t2.start()import threading,time

    def run(n):

    print("task",n)

    time.sleep(1)

    start_time = time.time()

    for i in range(50):

    t = threading.Thread(target=run,args=("t-%s"%i,))

    t.start()

    t.join()

    # 注:預設主線程不會等子線程執行完在執行。

    # 注:串行:等待前一個指令完全執行完,在執行下一條指令。

    # 注:執行個體.join() #wait() 等待執行完畢執行下條指令,可實作串行。

  • 并發類的繼承測試
  • 實作并發串行執行指令
  • 實作主線程等待子線程執行完畢後在往下執行import threading,time

    # 定義每個線程要運作的函數

    def run(n):

    print("task",n)

    time.sleep(2)

    # 測試執行結果後的用時時間

    start_time = time.time()

    # 建立清單接收t.start()對象内容。

    t_objs = []

    # 循環50次

    for i in range(3):

    # 生成一個線程執行個體target=目标,args=參數

    t = threading.Thread(target=run,args=("t-%s"%i,))

    # 啟動線程 調用run

    t.start()

    # 執行結果添加到清單

    t_objs.append(t)

    # 将每個循環t對象一次進行等待。

    for t in t_objs:

    # 每循環一次等待一次

    t.join()

    # 列印用時時間

    print("cost:",time.time() - start_time)

  • 守護程序

    守護線程:依賴于主線程存在的,為主線程工作。

      功能:設定成守護線程後,主線程關閉,守護線程也連帶關閉。

    使用場景:socketserver 每一個連結過來,socketserver就會啟動一

         個線程,當服務端關閉時,需要關閉其他線程,就可以用

         到守護線程,關閉。

     `

    import threading,time

定義每個線程要運作的函數

def run(n):

print("task",n)           

複制

time.sleep(5)           

複制

建立清單接收t.start()對象内容。

#t_objs = []

循環3次

for i in range(3):

# 生成一個線程執行個體target=目标,args=參數           

複制

t = threading.Thread(target=run,args=("t-%s"%i,))           

複制

# 要在start之前設定           

複制

# 把目前線程設定為守護線程           

複制

t.setDaemon(True)           

複制

# 啟動線程 調用run           

複制

t.start()           

複制

複制

注:所有程式執行完畢,還有一個join等待,執行完畢退出程式。

注:主線程MainThread,線程Thread。

threading.current_thread() #測試目前活動的線程類型。

threading.active_count() #測試目前活動的線程數。