详解python程序中的多任务


Posted in Python onSeptember 16, 2020

现实生活中,有很多场景中的事情是同时进行的,比如开车的时候,手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的。

以上这些可以理解为多任务。那在程序中怎么能做到多任务,它有什么好处?

接下来我们来看看没有多任务的程序是什么效果。

import time


def sing():
  for i in range(5):
    print("正在唱...")
    time.sleep(1)


def dance():
  for i in range(5):
    print("正在跳...")
    time.sleep(1)


def main():
  sing()
  dance()


if __name__ == "__main__":
  main()

运行结果:

详解python程序中的多任务

这个程序执行需要10秒钟,但是如果唱歌和跳舞能同时执行的话,只需要5秒钟就可以了。

没有多任务的时候,想一起执行上面的多个函数是做不到的,我们要学习的多任务就是多个函数(唱歌和跳舞)一起执行。

接下来我们来实现简单的多任务。

大家暂时不用关系代码怎么写,后续我们会具体讲解。

import time
import threading


def sing():
  for i in range(5):
    print("正在唱...")
    time.sleep(1)


def dance():
  for i in range(5):
    print("正在跳...")
    time.sleep(1)


def main():
  t1 = threading.Thread(target=sing)
  t2 = threading.Thread(target=dance)
  t1.start()
  t2.start()


if __name__ == "__main__":
  main()

运行结果:

详解python程序中的多任务

多任务的概念

什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。

打个比方,你一边在用浏览器上网,一边在听MP3,一边在用 Word 赶作业,这就是多任务。

至少同时有3个任务正在运行,还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已。

现在,多核 CPU 已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。

由于 CPU 执行代码都是顺序执行的,那么,单核CPU是怎么执行多任务的呢?

答案就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。

表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。

真正的并行执行多任务只能在多核 CPU 上实现,但是,由于任务数量远远多于 CPU 的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。

那这里就引出了2个概念。

并发

指的是任务数多于 cpu 核数,通过操作系统的各种任务调度算法,实现多个任务“一起”执行。

多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。

实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已。

并行

指的是任务数小于等于 cpu 核数,在同一时刻有多条指令在多个处理器上真的同时执行。

多任务的好处

多任务可以简单地理解为同时执行多个不同程序,它有如下好处:

  • 可以把占据长时间的程序中的任务放到后台去处理。
  • 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,界面上可以弹出一个进度条来显示处理的进度。
  • 程序的运行速度可能加快。
  • 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,可以释放一些珍贵的资源如内存占用等等。

以上就是详解python程序中的多任务的详细内容,更多关于python 多任务的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python基础教程之基本内置数据类型介绍
Feb 20 Python
python使用7z解压apk包的方法
Apr 18 Python
Python常用的json标准库
Feb 19 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
Python通过VGG16模型实现图像风格转换操作详解
Jan 16 Python
Python中无限循环需要什么条件
May 27 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
Jun 18 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
Jan 05 Python
python实现简单的tcp 文件下载
Sep 16 #Python
实现Python3数组旋转的3种算法实例
Sep 16 #Python
Python私有属性私有方法应用实例解析
Sep 15 #Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 #Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 #Python
pycharm激活方法到2099年(激活流程)
Sep 22 #Python
pycharm专业版远程登录服务器的详细教程
Sep 15 #Python
You might like
NO3第三帝国留言簿制作过程
2006/10/09 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
js中利用tagname和id获取元素的方法
2016/01/03 Javascript
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
jquery实现广告上下滚动效果
2021/03/04 jQuery
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
2018/11/29 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
详解Django 时间与时区设置问题
2019/07/23 Python
python join方法使用详解
2019/07/30 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Python调用Windows命令打印文件
2020/02/07 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
django ORM之values和annotate使用详解
2020/05/19 Python
python time()的实例用法
2020/11/03 Python
《水上飞机》教学反思
2014/04/10 职场文书
实习护士自荐信
2014/06/21 职场文书
建筑学专业自荐书
2014/07/09 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
经典爱情感言
2015/08/03 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
python某漫画app逆向
2021/03/31 Python
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python