多線程中print輸出結果的及時性

爲了看多線程的執行情況,用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只能執行一次”。(學習中,不知道是否有其它辦法可以多次運行,是否值得。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章