Python的多執行緒
執行緒的基本範例
import threading
import time
def thread_taskA(threadName, delay):
i = 0
while i<5:
i = i + 1
time.sleep(delay)
print(threadName + ':', i)
def thread_taskB(threadName, delay):
i = 0
while i<5:
i = i + 1
time.sleep(delay)
print(threadName + ':', i)
def thread_taskC(threadName, delay):
i = 0
while i<5:
i = i + 1
time.sleep(delay)
print(threadName + ':', i)
a = threading.Thread(target=thread_taskA, ('Thread-A', 0.5, ) )
b = threading.Thread(target=thread_taskB, ('Thread-B', 0.6, ) )
b = threading.Thread(target=thread_taskC, ('Thread-C', 0.5, ) )
a.start()
b.start()
c.start()
執行緒的同步控制
start()|啟動執行緒
join()|等待執行緒的執行完畢
is_alive()|執行緒是否已經啟動
import threading
import time
def thread_taskA(threadName, delay):
i = 0
while i<5:
i = i + 1
time.sleep(delay)
print(threadName + ':', i)
def thread_taskB(threadName, delay):
i = 0
while i<5:
i = i + 1
time.sleep(delay)
print(threadName + ':', i)
def thread_taskC(threadName, delay):
i = 0
while i<5:
i = i + 1
time.sleep(delay)
print(threadName + ':', i)
a = threading.Thread(target=thread_taskA, ('Thread-A', 0.5, ) )
b = threading.Thread(target=thread_taskB, ('Thread-B', 0.6, ) )
b = threading.Thread(target=thread_taskC, ('Thread-C', 0.5, ) )
a.start()
b.start()
a.join() # 等待 a 完成
b.join() # 等待 b 完成
c.start() # 在a,b完成後,c才開始啟動
Lock
Lock()|建立lock
acquire()|鎖定
release()|解除鎖定
import threading
lock = threading.Lock() # 透過建立 Lock
lock.acquire() # 鎖定
lock.release() # 解除鎖定
Event
Event()|註冊一個事件
set()|觸發該事件
wait()|等待該事件被觸發
clear()|將該事件的狀態清除至未被觸發的狀態
# 註冊事件
event = threading.Event()
# 觸發事件
event.set()
# 等待事件被觸發
event.wait()
# 觸發後將事件回歸原本狀態
event.clear()