详解python程序中的多任务

作者:小名叫小明 时间:2021-01-10 18:55:37 

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

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

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


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 核数,在同一时刻有多条指令在多个处理器上真的同时执行。

多任务的好处

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

  • 可以把占据长时间的程序中的任务放到后台去处理。

  • 用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,界面上可以弹出一个进度条来显示处理的进度。

  • 程序的运行速度可能加快。

  • 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,可以释放一些珍贵的资源如内存占用等等。

来源:https://www.cnblogs.com/studyming/p/13677103.html

标签:python,多任务
0
投稿

猜你喜欢

  • Keras 使用 Lambda层详解

    2021-08-11 20:12:40
  • 最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)

    2024-01-18 15:11:02
  • 浅谈Python数据处理csv的应用小结

    2021-06-10 01:40:41
  • [译]2009年海外Web设计风潮(上)

    2009-01-23 09:21:00
  • Python自动连接ssh的方法

    2023-09-20 00:12:16
  • python清空命令行方式

    2023-12-08 09:50:35
  • 详解MySQL中Order By排序和filesort排序的原理及实现

    2024-01-15 08:24:17
  • 解决django接口无法通过ip进行访问的问题

    2023-09-15 14:07:27
  • Element el-date-picker 日期选择器的使用

    2024-05-09 15:09:08
  • 重写django的model下的objects模型管理器方式

    2023-04-24 15:10:14
  • Python学习笔记之lambda表达式用法详解

    2022-01-28 15:39:37
  • 安装SQL Server2019详细教程(推荐!)

    2024-01-22 18:23:11
  • 一个例子轻松学会Vue.js

    2024-05-02 17:38:47
  • Vue路由模式中的hash和history模式详细介绍

    2024-06-07 15:20:16
  • Python中list列表的一些进阶使用方法介绍

    2023-12-24 10:31:47
  • 讲解SQL Server海量数据导入的最快方法

    2008-12-05 16:21:00
  • 如何恢复MYSQL的ROOT口令

    2024-01-16 15:50:08
  • python将天气预报可视化

    2021-01-19 01:37:46
  • Python中如何给字典设置默认值

    2023-09-21 00:15:32
  • MySQL 创建主键,外键和复合主键的语句

    2024-01-20 05:40:51
  • asp之家 网络编程 m.aspxhome.com