计算机的小员工----多线程

上两篇文章,我们说到了多任务与多线程,我们形象的将两者比喻成了大工厂和小车间,但是一个工厂只有资源和车间可不行,必须还得有上班工作的工人,也就是我们今天要了解的线程

线程

线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务,python的threading模块是对thread做了一些包装,可以更加方便的被使用线程就是车间中的工人,实际干活的也是工人,真正执行程序的还是线程
线程还分为单线程和多线程

单线程

在单线程中程序的执行还是按照计从上往下逐行去执行的,我们平时使用的调用函数就是单线程的一种体现
依旧以上传和下载为例

import time
def upload():
    print("开始上传。。。")
    for i in range(1,5):
        print(f"上传了{'{:.2%}'.format(i / 4)}")
        time.sleep(1)
    print("上传完毕。。。")

def download():
    print("开始下载.......")
    for i in range(1,5):
        print(f"下载了{'{:.2%}'.format(i / 4)}")
        time.sleep(1)
    print("下载完毕.......")

upload()
download()

多线程

在这里插入图片描述我们再通过案例来进一步的对多线程进行

import time
import threading

def upload():
    print("开始上传.......")
    for i in range(1, 5):
        print(f"上传了{'{:.2%}'.format(i / 4)}")
        time.sleep(1)
    print("上传结束.......")

def download():
    print("开始下载.......")
    for i in range(1, 5):
        print(f"下载了{'{:.2%}'.format(i / 4)}")
        time.sleep(1)
    print("下载完毕.......")

def main():
    upload_thread=threading.Thread(target=upload)
    down_thread=threading.Thread(target=download)
    upload_thread.start()
    down_thread.start()

if __name__ == '__main__':
    main()

看到这里我们得明白一个程序的执行必然有一个线程,这个线程是主线程,还得明白一个问题,一个程序的执行必然有一个进程,这个进程是主进程

当我们想要查看线程的数量的时候,我们可以利用 threading.enumerate() 方法

线程的特点

1.线程执行代码的封装
通过使用threading模块能够完成多任务的程序开发,为了让每个线程的封装性更完美所以使用threading模块时,往往会自定义一个新的子类class,只要继承threading.Thread即可实现,一般情况下一个线程中的入口函数是run
2.多线程共享全局变量
在一个函数中对全局变量进行修改的时候,到底是否需要看是否对全局变量的执行进行了引用修改,如果修改了引用,也就是说让全局变量指向了一个新的地方,如果仅修改了引用的数据,此时不用担心变量被分化

猜你喜欢

转载自blog.csdn.net/Layfolk_XK/article/details/107998605