1.线程的执行是无序的
线程需要注意一些地方,比如线程之间的执行是无序的
几个或者很多线程同时去竞争资源,它们之间的运行是独立的,互不影响,只要得到进程给它们分配的资源,就开始执行。
这里我模拟5个线程同时去竞争资源,来观察执行结果
# 线程之间执行是无序的
import threading
import time
def work1():
time.sleep(1)
print("当前的线程:",threading.current_thread().name) # 当前的线程名字
if __name__ == '__main__':
for _ in range(5): # 创建5个线程
sub_thread = threading.Thread(target=work1)
sub_thread.start()
结果:
你运行多次,发现每次的结果都不一样,这也就证明了线程的执行是无序的结论。
2.主线程等待子线程
主线程如果执行完毕就会销毁,如果不等待子线程,就会造成子线程未被执行,所以需要主线程等待子线程
import time
import threading
def show():
for i in range(5):
print("test,%d"%i)
time.sleep(0.5)
if __name__ == '__main__':
sub_process = threading.Thread(target=show,daemon=True)
sub_process.setDaemon(True)
# 1.子线程daemon默认跟随主线程 2.设置daemon=True会标记其为守护线程,如果剩下的线程只有守护线程时
sub_process.start()
time.sleep(5) # 主线程等待子线程5s 如果等待时间太短就会造成子线程还未执行完毕就被销毁,大家可以更改一下,运行就会发现真的不一样!
print("结束")
执行结果: