详解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程序中的观察者模式结构编写示例
May 27 Python
Python编程pygame模块实现移动的小车示例代码
Jan 03 Python
python3使用SMTP发送HTML格式邮件
Jun 19 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
使用Python OpenCV为CNN增加图像样本的实现
Jun 10 Python
tensorflow之并行读入数据详解
Feb 05 Python
Python能做什么
Jun 02 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
python反编译教程之2048小游戏实例
Mar 03 Python
python基础之停用词过滤详解
Apr 21 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
php自动适应范围的分页代码
2008/08/05 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
编写Python CGI脚本的教程
2015/06/29 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
总结html5自定义属性有哪些
2020/04/01 HTML / CSS
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
房地产销售计划书
2014/01/10 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
旗帜观后感
2015/06/08 职场文书