学习记录:多任务——线程(上)

线程中的注意点

  1. 主线程会等到所有子线程结束之后才结束
  2. sub_thread1 = threading.Thread(target=)此时只是创建了一个对象,还没有生成子线程,sub_thread1.start()此时会生成子线程并执行线程,子线程指向的方法或者程序结束后,子线程也自行结束
  3. 在没有控制的情况下,处理器对于子线程和主线程的控制是无序的
  4. 并行:真多任务,多核同时运行
    并发:假多任务,通过“时间片轮转”或“优先级调度”等算法实现单核多任务

线程的学习内容

创建多线程任务: threading.Thread()

  • 上图中有两点注意事项:
    1. Thread一定要大写
    2. target后面跟着的是函数或者类的名字,所以不要写()

使用time.sleep控制线程的执行顺序

因为操作系统是无序调用子线程,如果不加以时间控制,则会出现以下情况
例:

在这里插入图片描述
上述代码的执行结果如下
在这里插入图片描述
可以看出,无论是子线程还是主线程,都是无规则被调用的
下面我们将程序中加上time.sleep()来控制一下被调用顺序:
在这里插入图片描述
执行结果如下
在这里插入图片描述
可以看出,已经实现顺序执行了

统计当前有多少个子线程:threading.enumerate()

在这里插入图片描述
执行结果如下
在这里插入图片描述
从enumerate的print中可以看出,一开始包括主线程在内一共三个线程在执行
5秒钟之后子线程1执行结束,列表中变为两个线程
10秒之后子线程2执行结束,列表中只剩下主线程一个
break条件满足,程序结束

在结束之前,对enumerate做一下扩展

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
例:
1. 当前有以下列表:
在这里插入图片描述
如果想获取其中的每一个值,可以使用for循环:
在这里插入图片描述
对该字符串使用enumerate()函数,得到以下结果
在这里插入图片描述
可以看出,此时的结果是个元组,也就是说此时的name是个元组
既然是元组,我们就可以如下方式拆包:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样就可以使用元祖中的值了

顺便说一下元组的拆包:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值