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