Python进阶(二) -- 多线程

Python多任务和线程

多任务

  1. 概念:同一时间,多个任务同时执行

  2. 优势:时间短,效率高

  3. 表现:在Windows系统中可以同时多个窗口运行多个任务。Python默认为单任务运行。

线程的基本使用

概念

可简单理解为是程序执行的一条分支,也是程序执行流程的最小单元。线程是被系统独立调用和分派的基本单位,线程自己并不拥有系统资源,只拥有一点在运行中必不可少的资源,但他可以同属一个进程的其他线程共享进程所拥有的全部资源。

  • 主线程

    当一个程序启动时,就有一个进程被系统创建,与此同时一个线程也会被运行,该线程通常叫做程序主线程,也就是说,程序启动就会创建一个主线程。

    主线程的重要性有两方面:

    1. 产生其他子线程的线程;

    2. 通常它必须最后完成执行。

  • 子线程:

    可以看做是程序执行的一条分支,当子线程启动后会和主线程一起同时执行。

使用threading模块子线程创建

  1. 步骤:

    1. 导入模块 threading

    2. 使用threading.Thread()创建对象(子线程对象)

    3. 指定子线程执行的分支

    4. 启动子线程,线程对象.start()

  2. 案例:

import time
#导入模块 `threading`
import threading


# 单线程的使用:
def nihao():
    print('hello,World')
    time.sleep(1)


if __name__ == '__main__':
    # 单线程调用
    time1 = time.time()
    for _ in range(5):
        nihao()
    time2 = time.time()
    print(time2 - time1)
    print('--------------------------------')

    # 子线程调用:
    time3 = time.time()
    for _ in range(5):
    #    使用`threading.Thread()`创建对象(子线程对象)
    #	 指定子线程执行的分支
        thread_obj = threading.Thread(target=nihao)
    #   启动子线程,`线程对象.start()`
        thread_obj.start()
    time4 = time.time()
    print(time4 - time3)

线程名称和数量

查看线程数量

  • threading.enumerate():获取当前所有活跃的线程对象列表。使用len()对列表求长度可以看到当前活跃的线程的个数。

查看线程名称

  • threading.current_thread():获取当前线程对象,对象中含有名称。

案例

import time
import threading


def nihao():
    #`threading.current_thread()`:获取当前线程对象,对象中含有名称
    print('hello,World', threading.current_thread())
    time.sleep(1)


if __name__ == '__main__':
    thread_num = len(threading.enumerate())
    #现在只有主线程
    print(f'当前线程数量为:{
     thread_num}', threading.current_thread())
    for _ in range(5):
        thread_obj = threading.Thread(target=nihao)
        thread_obj.start()
        #`threading.enumerate()`:获取当前所有活跃的线程对象列表。
        thread_num1 = len(threading.enumerate())
        print(f'当前线程数量为:{
     thread_num1}')

线程参数和顺序

参数

在线程中传递参数有三种方法:

  1. 使用元组传递:threading.Thread(target=函数名称,args=(参数1,参数2,...,参数n))
  2. 使用字典传递:threading.Thread(target=函数名称,kwargs={参数名称:参数值,参数名称:参数值,参数名称:参数值,...})
  3. 混合使用元组和字典:threading.Thread(target=函数名称,args=(参数1,参数2,...,参数n),kwargs={参数名称:参数值,参数名称:参数值,参数名称:参数值,...})

案例:

import time
import threading


def say(name1, name2, words):
    for _ in range(5):
        print(f'{
     name1}{
     name2}{
     words}')
        time.sleep(1)


if __name__ == 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈钟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值