多线程中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只能执行一次”。(学习中,不知道是否有其它办法可以多次运行,是否值得。)

猜你喜欢

转载自blog.csdn.net/seeker3/article/details/106507694
今日推荐