Python基础-29-多线程threading的使用

本文介绍了Python的threading模块,包括线程的创建和使用,如currentThread、enumerate、activeCount等方法,以及Thread类的详细说明。通过实例展示了如何创建线程、设置线程名,并探讨了join方法在线程同步中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

threading介绍


threading是对thread模块的再封装,线程并发运行并且共享内存

threading模块支持守护线程

 

threading的使用

导入线程模块 import threading

(1)threading常用方法

threading.currentThread():返回当前的线程变量

threading.currentThread().name:返回当前的线程的名字

threading.enumerate():返回一个包含正在运行的线程的list,正在运行指启动后,结束前的线程

threading.activeCount():返回正在运行的线程数量(与len(threading.enumerate()) 有相同结果)

 

(2)Thread线程类的语法结构

Thread(group=None,target=None,name=None,args=(),kwargs={})

group:线程组,目前只能使用None

target:执行的方法

name:线程名

args/kwargs:要传入方法的参数

 

(3)Thread创建的实例对象常用方法

start():线程准备就绪,等待CPU调度

join(timeout):阻塞当前环境中的子线程,直到调用此方法的线程终止或到达指定的timeout

setName():设置线程名

getName():获取线程名

setDaemon(True):设为守护线程,一定要再调用start()前设置

 

threading多线程案例

(1)代码

import threading
import time

def run_001(name):
    print(threading.current_thread().name, time.ctime())
    print("你好,%s"%name)
    time.sleep(2)
    print("第一个线程结束...%s"%time.ctime())


def run_002(name):
    print(threading.current_thread().name, time.ctime())
    print("你好,%s"%name)
    time.sleep(1)
    print("第二个线程结束...%s" % time.ctime())


def run_003():
    print(threading.current_thread().name, time.ctime())
    time.sleep(3)
    print("第三个线程结束...%s"%time.ctime())

if __name__ == '__main__':
    print("---主线程开始---",threading.current_thread().name)
    t1 = threading.Thread(target=run_001,args=("suner",))
    t2 = threading.Thread(target=run_002,args=("wang",))
    t3 = threading.Thread(target=run_003)

    t1.start()
    t2.start()
    t3.start()
    print("---主线程结束---",threading.current_thread().name)

(2)结果

 

列表式使用

利用列表方式,实现多线程并发执行效果

(1)代码

import threading
import time

def run(num):
    print("%s线程开始..."%threading.current_thread().name)
    print("正在打印...%s"%num)
    time.sleep(2)
    print("%s线程结束..."%threading.current_thread().name)

if __name__ == '__main__':
    print("---主线程开始---", threading.current_thread().name)
    thread_list = []
    for i in range(5):
        # 创建一个线程,并将创建的线程添加到线程列表
        t = threading.Thread(target=run, args=(i,))
        thread_list.append(t)

    # 循环线程列表,统一执行
    for t in thread_list:
        t.start()

    print("---主线程结束---", threading.current_thread().name)

(2)结果

 

join用法

join所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程在终止

(1)代码

import threading
import time

def run(num):
    print("%s线程开始..."%threading.current_thread().name)
    print("正在打印...%s"%num)
    time.sleep(2)
    print("%s线程结束..."%threading.current_thread().name)

if __name__ == '__main__':
    print("---主线程开始---", threading.current_thread().name)
    thread_list = []
    for i in range(1,6):
        # 创建一个线程,并将创建的线程添加到线程列表
        t = threading.Thread(target=run, args=(i,))
        thread_list.append(t)

    # 循环线程列表,统一执行
    for t in thread_list:
        t.start()
        t.join()

    print("---主线程结束---", threading.current_thread().name)

(2)结果

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值