详解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多线程编程方式分析示例详解
Dec 06 Python
Python中__name__的使用实例
Apr 14 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
python模块之re正则表达式详解
Feb 03 Python
python实现简易云音乐播放器
Jan 04 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
Python中的二维数组实例(list与numpy.array)
Apr 13 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
python爬虫泛滥的解决方法详解
Nov 25 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
在“咖啡之国”感受咖啡文化
2021/03/03 咖啡文化
elgg 获取文件图标地址的方法
2010/03/20 PHP
php数据库抽象层 PDO
2011/05/07 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
用ADODB.Stream转换
2007/01/22 Javascript
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
Knockoutjs快速入门(经典)
2012/12/24 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
关于AngularJS中几种Providers的区别总结
2020/05/17 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Django小白教程之Django用户注册与登录
2016/04/22 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
详解python logging日志传输
2020/07/01 Python
python中pdb模块实例用法
2021/01/15 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
荷兰游戏商店:Allyouplay
2019/03/16 全球购物
学生档案自我鉴定
2013/10/07 职场文书
《猫》教学反思
2014/02/26 职场文书
公司踏青活动方案
2014/08/16 职场文书
元旦标语大全
2014/10/09 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书