持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天
多线程
我们先来浅聊一下多线程(线程干的就是一些耗时操作。比如:下载)
- 举个大家都知道的例子
- 360想必大家都很熟悉了,杀毒,清理垃圾,优化加速,安全检查这四个是这款软件的四个功能,也是并列的四个线程,我们打开了360这个进程后这4个线程就可以同时在一个进程里同时实现,这样就不用让进程再去请求操作系统去重新分配空间了,这样可以节省很多非必要的资源。
定义
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
优点
- 使用线程可以把占据长时间的程序中的任务放到后台处理
- 用户界面可以更加吸引人,比如触发某些事件处理,可以弹出一个进度条来显示处理的进度
- 程序运行速度可能加快
- 在一些等待的任务实现(如用户输入)上,线程比较有用,这种情况下我们可以多释放一些资源(如内存)
thread和threading
python中通过两个标准库thread和threading提供对线程的支持。thread提供了低级的、原始的线程以及一个简单的锁
threading模块提供的用法:
- threading.currentThread():返回当前的线程变量
- threading.enumerate():返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程
- threading.activeCount():返回正在运行的线程数量。与len(threading.enumerate())有相同的结果
除了方法,线程模块提供了Thread类来处理线程,Thread类提供了一下方法:
- run():用以表示线程活动的方法
- 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
多线程状态