簡介:
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() #測試目前活動的線程數。