Python并发编程7——线程编程(1) 基本概念及基本代码实现

线程编程(Thread)

线程基本概念

  1. 什么是线程
    【1】 线程被称为轻量级的进程
    【2】 线程也可以使用计算机多核资源,是多任务编程方式
    【3】 线程是系统分配内核的最小单元
    【4】 线程可以理解为进程的分支任务

  2. 线程特征
    【1】 一个进程中可以包含多个线程
    【2】 线程也是一个运行行为,消耗计算机资源
    【3】 一个进程中的所有线程共享这个进程的资源
    【4】 多个线程之间的运行互不影响各自运行
    【5】 线程的创建和销毁消耗资源远小于进程
    【6】 各个线程也有自己的ID等特征

threading模块创建线程

【1】 创建线程对象

from threading import Thread 

t = Thread()
功能:创建线程对象
参数:target 绑定线程函数
     args   元组 给线程函数位置传参
     kwargs 字典 给线程函数键值传参

【2】 启动线程

 t.start()

【3】 回收线程

 t.join([timeout])

【4】代码示例

    """
    线程示例
    """

    import threading
    from time import sleep
    import os

    a = 1

    # 线程函数
    def music():
        global a
        print("a = ",a)
        a = 10000
        for i in range(5):
            sleep(2)
            print(os.getpid(),"播放心如止水")

    # 创建线程对象
    t = threading.Thread(target=music)
    t.start()

    # 主线程任务
    for i in range(3):
        sleep(3)
        print(os.getpid(),"播放跳舞吧")

    t.join()  # 回收线程

    print("Main thread a:",a)


    # 含有参数的线程函数
    def fun(sec,name):
        print("线程函数传参")
        sleep(sec)
        print("%s 线程执行完毕"%name)

    # 创建多个线程
    jobs = []
    for i in range(5):
        t = Thread(target = fun,args=(2,),
                kwargs={'name':'T%d'%i})
        jobs.append(t)
        t.start()

    for i in jobs:
        i.join()

线程对象属性

t.name 线程名称
t.setName() 设置线程名称
t.getName() 获取线程名称

t.is_alive() 查看线程是否在生命周期

t.daemon 设置主线程和分支线程的退出关系
t.setDaemon() 设置daemon属性值
t.isDaemon() 查看daemon属性值

daemon为True时主线程退出分支线程也退出。要在start前设置,通常不和join一起使用。


    from threading import Thread
    from time import sleep

    def fun():
        sleep(3)
        print("线程属性测试")

    t = Thread(target=fun,name = "Tarena")

    # 主线程退出分支线程也退出
    t.setDaemon(True)

    t.start()

    # 线程名称
    t.setName("Tedu")
    print("Thread name:",t.getName())

    # 线程生命周期
    print("is alive:",t.is_alive())


自定义线程类

  1. 创建步骤
    【1】 继承Thread类
    【2】 重写__init__方法添加自己的属性,使用super加载父类属性
    【3】 重写run方法

  2. 使用方法
    【1】 实例化对象
    【2】 调用start自动执行run方法
    【3】 调用join回收线程



    from threading import Thread
    from time import sleep,ctime

    class MyThread(Thread):
        def __init__(self,target = None,args=(),
                    kwargs = {},name="Tedu"):
            super().__init__()
            self.target = target
            self.args = args
            self.kwargs = kwargs
            self.name = name

        def run(self):
            self.target(*self.args,**self.kwargs)


    # **********************************
    # 通过完成上面的MyThread类让整个程序可以正常执行
    # 当调用start时player作为一个线程功能函数运行
    # 注意,函数的名称和参数并不确定,player只是测试函数
    # ***************************

    def player(sec,song):
        for i in range(2):
            print("Playing %s:%s"%(song,ctime()))
            sleep(sec)

    t = MyThread(target = player,args = (3,),
                kwargs={'song':'凉凉'},name = 'happy')
    t.start()
    t.join()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值