Python快速而美丽[v1.0.0][控制线程]

JOIN线程

Thread类提供了join()函数,它用来让一个线程等待另一个线程执行完成,当程序的执行过程中线程A调用了线程B的join()函数时,线程A将被阻塞,直到线程B执行完成。
该方法的设计主要用于将大的问题拆分成若干个小问题,并为每个小问题分配线程,当所有小问题都解决了再调用主线程来进一步操作

import threading

# 定义action函数准备作为线程执行体使用
def action(max):
    for i in range(max):
        print(threading.current_thread().name + " " + str(i))
  
# 启动子线程
threading.Thread(target=action, args=(100,), name="新线程").start()
for i in range(100):
    if i == 20:
        jt = threading.Thread(target=action, args=(100,), name="被Join的线程")
        jt.start()
        # 主线程调用了jt线程的join()方法,主线程
        # 必须等jt执行结束才会向下执行
        jt.join()
    print(threading.current_thread().name + " " + str(i))
  • 这段程序实际上一共3个线程,除了主线程外,定义了一个名为“新线程”的线程,然后又定义了一个名为“被Join的线程”的线程
  • 启动程序后首先是“新线程“和主线程并行执行
  • 当主线程的循环变量i=20的时候,启动了“被Join的线程”,该线程不会和主线程并行执行,因为主线程调用了它的join()函数,因此主线程等待,处于阻塞状态
  • 直到“被Join的线程”被执行完毕,主线程继续执行
    join()函数可以指定一个timeout参数,也就是等待时间,单位是秒,如果在timeout时间内被join的线程还没有结束,则不再继续等待

后台线程

后台线程又被成为是守护线程,主要用于为其他线程提供服务,后台线程有一个特点,就是如果所有的前台线程都死亡了,那么后台线程会自动死亡

import threading

# 定义后台线程的线程执行体与普通线程没有任何区别
def action(max):
    for i in range(max):
        print(threading.current_thread().name + "  " + str(i))
t = threading.Thread(target=action, args=(100,), name='后台线程')
# 将此线程设置成后台线程
# 也可在创建Thread对象时通过daemon参数将其设为后台线程
t.daemon = True
# 启动后台线程
t.start()
for i in range(10):
    print(threading.current_thread().name + "  " + str(i))
# -----程序执行到此处,前台线程(主线程)结束------
# 后台线程也应该随之结束
  • 创建后台线程有两个方法,其一是将线程的daemon属性设置为True,其二是后台线程创建的子线程默认就是后台线程,同时前台线程创建的子线程也就是前台线程
  • 设置后台线程,必须在该线程启动之前进行设置,否则将报RuntimeError

线程睡眠

import time

for i in range(10):
    print("当前时间: %s" % time.ctime())
    # 调用sleep()函数让当前线程暂停1s
    time.sleep(1)

你可能感兴趣的:(Python快速而美丽)