爲了看多線程的執行情況,用print輸出一些信息。
#多線程演示
#
#
import threading
import time
print('start of program.')
def takeANap():
time.sleep(5)
print('wake up!', flush=True) #沒有 flush=True 將會導致所有線程執行完畢,才一起顯示打印信息
def takeANap2(arg2):
time.sleep(1)
print('wake up!', arg2, flush=True) #沒有 flush=True 將會導致所有線程執行完畢,才一起顯示打印信息
def takeANap3(*arg3):
time.sleep(8)
print('wake up!', ' & '.join(arg3), flush=True) #沒有 flush=True 將會導致所有線程執行完畢,才一起顯示打印信息
threadObj=threading.Thread(target=takeANap)
threadObj.start()
threadObj2=threading.Thread(target=takeANap2, args=[' Mr. Superman.',])
threadObj2.start()
threadObj3=threading.Thread(target=takeANap3, args=[' Mr. Superman', 'Mr. Tang SanZang',])
threadObj3.start()
print('end of program')
如果需要在所有進程執行完再允許後續的語句,可以參考:
#多線程演示
#
#
import threading
import time
print('start of program.')
def takeANap():
time.sleep(5)
print('wake up!', flush=True) #沒有 flush=True 將會導致所有線程執行完畢,才一起顯示打印信息
def takeANap2(arg2):
time.sleep(1)
print('wake up!', arg2, flush=True) #沒有 flush=True 將會導致所有線程執行完畢,才一起顯示打印信息
def takeANap3(*arg3):
time.sleep(8)
print('wake up!', ' & '.join(arg3), flush=True) #沒有 flush=True 將會導致所有線程執行完畢,才一起顯示打印信息
#list for test purpose
threadObjs=[]
#individuals.
threadObj=threading.Thread(target=takeANap)
threadObjs.append(threadObj)
threadObj2=threading.Thread(target=takeANap2, args=[' Mr. Superman.',])
threadObjs.append(threadObj2)
threadObj3=threading.Thread(target=takeANap3, args=[' Mr. Superman', 'Mr. Tang SanZang',])
threadObjs.append(threadObj3)
print('end of program -- 1st round.', flush=True)
print('threadObjs:', threadObjs, flush=True)
for threadO in threadObjs:
threadO.start()
threadO.join()
print('end of program -- 2nd round.', flush=True)
##上述兩個測試,不能合併在一個小程序中用相同的thread名稱運行: “thread只能執行一次”。(學習中,不知道是否有其它辦法可以多次運行,是否值得。)