详解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实现的登录和操作开心网脚本分享
Jul 09 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
Python实现的选择排序算法示例
Nov 29 Python
Pandas中Series和DataFrame的索引实现
Jun 27 Python
python利用7z批量解压rar的实现
Aug 07 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
Python下利用BeautifulSoup解析HTML的实现
Jan 17 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
使用python将微信image下.dat文件解密为.png的方法
Nov 30 Python
如何利用pygame实现打飞机小游戏
May 30 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
PHP.MVC的模板标签系统(四)
2006/09/05 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
深入探究node之Transform
2017/07/20 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
[05:13]2018DOTA2亚洲邀请赛主赛事第二日战况回顾 LGD、VG双雄携手晋级
2018/04/05 DOTA
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
Python进程间通信之共享内存详解
2017/10/30 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
工程部主管岗位职责
2013/11/17 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
针对吵架老公保证书
2015/05/08 职场文书
运动会宣传语
2015/07/13 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书
Jsonp劫持学习
2021/04/01 PHP
Python+uiautomator2实现自动刷抖音视频功能
2021/04/29 Python
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python