Python - 多線程 join 的使用
============
def T1_job():
print("T1 start\n")
for i in range(10):
time.sleep(0.1)
print("T1 finish\n")
def T2_job():
print("T2 start\n")
print("T2 finish\n")
thread_1 = threading.Thread(target=T1_job, name='T1') # 指定線程
thread_2 = threading.Thread(target=T2_job, name='T2')
thread_1.start() # 开启線程 T1
thread_2.start() # 开启線程 T2
thread_1.join() Python - 多線程 join 的使用 # 等到T1完成後,才會繼續下一 步
print("all done\n")
>>>>
T1 start
T2 start
T2 finish
T1 finish
all done
==================================
Python - 多線程 lock 的使用
import threading
def job1():
global A,lock
lock.acquire()
for i in range(10):
A+=1
print('job1',A)
lock.release()
def job2():
global A,lock
lock.acquire()
for i in range(10):
A+=10
print('job2',A)
lock.release()
if __name__== '__main__':
lock=threading.Lock()
A=0
t1=threading.Thread(target=job1) # 使用 lock 鎖住 A , 不讓其他程式調用 ,直到使用完畢
t2=threading.Thread(target=job2)
t1.start()
t2.start()
t1.join()
t2.join()
>>>
job1 1
job1 2
job1 3
job1 4
job1 5
job1 6
job1 7
job1 8
job1 9
job1 10
job2 20
job2 30
job2 40
job2 50
job2 60
job2 70
job2 80
job2 90
job2 100
job2 110
==========================================
參考
https://morvanzhou.github.io/tutorials/python-basic/threading/3-join/
https://morvanzhou.github.io/tutorials/python-basic/threading/6-lock/