详解python程序中的多任务

 更新时间:2020年09月16日 08:36:41   作者:小名叫小明  
这篇文章主要介绍了python程序中多任务的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下

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

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

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

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()

运行结果:

这个程序执行需要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()

运行结果:

多任务的概念

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

打个比方,你一边在用浏览器上网,一边在听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 pass 语句使用示例

    Python pass 语句使用示例

    这篇文章主要介绍了Python pass 语句的使用方法示例,需要的朋友可以参考下
    2014-03-03
  • 使用Python实现博客上进行自动翻页

    使用Python实现博客上进行自动翻页

    这篇文章主要介绍了使用Python实现博客上进行自动翻页,需要的朋友可以参考下
    2017-08-08
  • Pytorch实战之数据加载和处理详解

    Pytorch实战之数据加载和处理详解

    Pytorch提供了许多工具来简化和希望数据加载,使代码更具可读性,本文将通过一些简单示例为大家具体讲讲,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • 如何实现在远程linux服务器上运行python代码

    如何实现在远程linux服务器上运行python代码

    这篇文章主要介绍了如何实现在远程linux服务器上运行python代码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • python之singledispatch单分派问题

    python之singledispatch单分派问题

    这篇文章主要介绍了python之singledispatch单分派问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python数据分析Pandas Dataframe排序操作

    Python数据分析Pandas Dataframe排序操作

    这篇文章主要介绍了Python数据分析Pandas Dataframe排序操作,数据的排序是比较常用的操作,DataFrame 的排序分为两种,一种是对索引进行排序,另一种是对值进行排序,接下来就分别都介绍一下,需要的小伙伴可以参考一下
    2022-05-05
  • 详解pandas删除缺失数据(pd.dropna()方法)

    详解pandas删除缺失数据(pd.dropna()方法)

    这篇文章主要介绍了pandas删除缺失数据(pd.dropna()方法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Django 状态保持搭配与存储的实现

    Django 状态保持搭配与存储的实现

    本文主要介绍了Django 状态保持搭配与存储的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • python opencv pytesseract 验证码识别的实现

    python opencv pytesseract 验证码识别的实现

    这篇文章主要介绍了python opencv pytesseract 验证码识别的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • python打包exe开机自动启动的实例(windows)

    python打包exe开机自动启动的实例(windows)

    今天小编就为大家分享一篇python打包exe开机自动启动的实例(windows),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06

最新评论