第十章:使用进程、线程和协程提供并发性-threading:进程中管理并发操作-枚举所有线程

10.3.4 枚举所有线程
没有必要为所有守护线程维护一个显式句柄来确保它们在退出主进程之前已经完成。enumerate()会返回活动Thread实例的一个列表。这个列表也包括当前线程,由于等待当前线程终止(join)会引入一种死锁情况,所以必须跳过。

import random
import threading
import time
import logging

def worker():
    """thread worker function"""
    pause = random.randint(1,5) / 10
    logging.debug('sleeping %0.2f',pause)
    time.sleep(pause)
    logging.debug('ending')


logging.basicConfig(
    level=logging.DEBUG,
    format='(%(threadName)-10s) %(message)s',
    )

for i in range(3):
    t = threading.Thread(target=worker,daemon=True)
    t.start()

main_thread = threading.main_thread()
for t in threading.enumerate():
    if t is main_thread:
        continue
    logging.debug('joining %s',t.getName())
    t.join()

由于工作线程睡眠的时间量是随机的,所以这个程序的输出可能有变化。
运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43193719/article/details/89597712