python多线程1

122 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天

多线程

我们先来浅聊一下多线程(线程干的就是一些耗时操作。比如:下载)

  • 举个大家都知道的例子

image-20220601221319118.png

  • 360想必大家都很熟悉了,杀毒,清理垃圾,优化加速,安全检查这四个是这款软件的四个功能,也是并列的四个线程,我们打开了360这个进程后这4个线程就可以同时在一个进程里同时实现,这样就不用让进程再去请求操作系统去重新分配空间了,这样可以节省很多非必要的资源。

定义

线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

优点

  • 使用线程可以把占据长时间的程序中的任务放到后台处理
  • 用户界面可以更加吸引人,比如触发某些事件处理,可以弹出一个进度条来显示处理的进度
  • 程序运行速度可能加快
  • 在一些等待的任务实现(如用户输入)上,线程比较有用,这种情况下我们可以多释放一些资源(如内存)

thread和threading

python中通过两个标准库thread和threading提供对线程的支持。thread提供了低级的、原始的线程以及一个简单的锁

threading模块提供的用法:

  1. threading.currentThread():返回当前的线程变量
  2. threading.enumerate():返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程
  3. threading.activeCount():返回正在运行的线程数量。与len(threading.enumerate())有相同的结果

除了方法,线程模块提供了Thread类来处理线程,Thread类提供了一下方法:

  1. run():用以表示线程活动的方法
  2. start():启动线程活动

创建一个线程

import threading
from time import sleep
def download(n):
    images = ['girl.jpg','boy.jpg','man.jpg']
    for image in images:
        print('正在下载:',image)
        sleep(n)
        print('下载{}成功!'.foramat(image))
def listenMusic():
    musics = ['稻香','七里香','花海','手写的从前']
    for music in musics:
        print('正在听{}'.format(music))
        sleep(1)
        
if __name__ == '__main__':
    t = threading.Tbread(target=download,name='aa',args=(1,))
    t.start()
    t1 = threading.Tbread(target=listenMusic,name='a') 
    t1.start()
    
    n = 1 
    while Ture:
        print(n)
        sleep(2)
        n += 1

多线程状态

image-20220601230013241.png